温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何实现仅用于开发的登录

发布时间:2021-10-26 15:59:25 来源:亿速云 阅读:108 作者:iii 栏目:编程语言

本篇内容主要讲解“如何实现仅用于开发的登录”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现仅用于开发的登录”吧!

首先在 main() 函数中添加此路由。

router.HandleFunc("POST", "/api/login", requireJSON(login))

登录

此函数处理对 /api/login 的 POST 请求,其中 JSON body 只包含用户名,并以 JSON 格式返回通过认证的用户、令牌和过期日期。

func login(w http.ResponseWriter, r *http.Request) {     if origin.Hostname() != "localhost" {         http.NotFound(w, r)         return     }      var input struct {         Username string `json:"username"`     }     if err := json.NewDecoder(r.Body).Decode(&input); err != nil {         http.Error(w, err.Error(), http.StatusBadRequest)         return     }     defer r.Body.Close()      var user User     if err := db.QueryRowContext(r.Context(), `         SELECT id, avatar_url         FROM users         WHERE username = $1     `, input.Username).Scan(         &user.ID,         &user.AvatarURL,     ); err == sql.ErrNoRows {         http.Error(w, "User not found", http.StatusNotFound)         return     } else if err != nil {         respondError(w, fmt.Errorf("could not query user: %v", err))         return     }      user.Username = input.Username      exp := time.Now().Add(jwtLifetime)     token, err := issueToken(user.ID, exp)     if err != nil {         respondError(w, fmt.Errorf("could not create token: %v", err))         return     }      respond(w, map[string]interface{}{         "authUser":  user,         "token":     token,         "expiresAt": exp,     }, http.StatusOK) }

首先,它检查我们是否在本地主机上,或者响应为 404 Not Found。它解码主体跳过验证,因为这只是为了开发。然后在数据库中查询给定用户名的用户,如果没有,则返回 404 NOT Found。然后,它使用用户 ID 作为主题发布一个新的 JSON Web 令牌。

func issueToken(subject string, exp time.Time) (string, error) {     token, err := jwtSigner.Encode(jwt.Claims{         Subject:    subject,         Expiration: json.Number(strconv.FormatInt(exp.Unix(), 10)),     })     if err != nil {         return "", err     }     return string(token), nil }

该函数执行的操作与 前文 相同。我只是将其移过来以重用代码。

创建令牌后,它将使用用户、令牌和到期日期进行响应。

种子用户

现在,你可以将要操作的用户添加到数据库中。

INSERT INTO users (id, username) VALUES     (1, 'john'),     (2, 'jane');

你可以将其保存到文件中,并通过管道将其传送到 Cockroach CLI。

cat seed_users.sql | cockroach sql --insecure -d messenger

就是这样。一旦将代码部署到生产环境并使用自己的域后,该登录功能将不可用。

到此,相信大家对“如何实现仅用于开发的登录”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI