gin实战疑问

疑问

想实现注册或者登录之后直接跳转到首页保持登录状态,这里的想法是,帐号密码验证成功后签发token并写入到响应头中然后跳转到首页。但是跳转过去了之后在请求头中没有找到token,这样岂不是在后续的访问授权资源时又要重新获取token

想达到的目的

在不会前端一些框架的情况下(只会html,css),如何让用户在获得token之后在下一次请求在请求头Authrication中携带token,因为后端验证是基于Authrication判断的,后端已经实现签发续签,在即将过期30s前续签)

流程图

Code

登录代码片段

func (a *auth) SubmitLogin(c *gin.Context) {
    btx := srv.NewContext(c)

    // 绑定传入数据
    var user models.User
    if err := c.ShouldBind(&user); err != nil {
        btx.Back().WithErr(LoginErr).Redirect()
        return
    }

    // 验证帐号密码
    if ok := btx.LoginVerify(&user); ok == false {
        btx.Back().WithErr(LoginErr).Redirect()
        return
    } else {
        // 将 token 写入到响应头部,携带登录成功信息跳转到首页
        btx.SignAndSet().To(global.DefaultPath).WithMsg(LoginSuccess).Redirect()
    }
}

鉴权中间件

func AuthMiddleware(ctx *gin.Context) {
    btx := NewContext(ctx)
    token := btx.Ctx.Request.Header.Get(global.DefaultAuthorization)
    data := gin.H{
        "msg": "请登录",
    }
    // 无 token 则提示登录
    if token == "" {
        btx.Json(http.StatusUnauthorized, data)
        btx.Ctx.Abort()
        return
    }
    // 解析 token 验证来访者身份
    if ok := btx.check(); !ok {
        btx.Json(http.StatusUnauthorized, data)
        ctx.Abort()
        return
    }
    ctx.Next()
}
最佳答案

登录接口返回回token,前端接收写入cookie,或者localStorage。需要鉴权的接口请求带上就行

1年前 评论
Scrooge (楼主) 1年前
浮心 1年前
Scrooge (楼主) 1年前
浮心 1年前
浮心 1年前
Scrooge (楼主) 1年前
浮心 1年前
讨论数量: 8

登录接口返回回token,前端接收写入cookie,或者localStorage。需要鉴权的接口请求带上就行

1年前 评论
Scrooge (楼主) 1年前
浮心 1年前
Scrooge (楼主) 1年前
浮心 1年前
浮心 1年前
Scrooge (楼主) 1年前
浮心 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!