美文网首页
JWT用户登录机制

JWT用户登录机制

作者: __默默无闻 | 来源:发表于2019-04-16 11:57 被阅读0次

最近使用gin框架开发程序,其中后台管理员登录使用jwt机制。
具体jwt是啥,本文章不想搬运其他文章内容,各位自行解决此问题。

准备

平台使用jwt-go扩展包

生成Token

本平台使用手机号与密码生成token

//生成token
import (
    "github.com/dgrijalva/jwt-go"
    "time"
)
var jwtSecret = []byte(setting.JwtSecret)  //用来进行jwt的签发和jwt的验证
type Claims struct {
    Telephone    string `json:"telephone"`
    Password string `json:"password"`
    jwt.StandardClaims
}
func GenerateToken(telephone, password string) (string,time.Time, error) {
    nowTime := time.Now()
    expireTime := nowTime.Add(3 * time.Hour) //有效期 三个小时
    claims := Claims{
        telephone,  //手机号
        password,  //密码
        jwt.StandardClaims{
            ExpiresAt: expireTime.Unix(),
            Issuer:    "test",  //自定义平台标识
        },
    }
    tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    token, err := tokenClaims.SignedString(jwtSecret)
    return token,expireTime, err
}

解析token

//解析token

func ParseToken(token string) (*Claims, error) {
    tokenClaims, err := jwt.ParseWithClaims(token, &Claims{}, func(token *jwt.Token) (interface{}, error) {
        return jwtSecret, nil
    })

    if tokenClaims != nil {
        if claims, ok := tokenClaims.Claims.(*Claims); ok && tokenClaims.Valid {
            return claims, nil
        }
    }

    return nil, err
}

刷新token

func RefreshToken(token string) (string, error,time.Time) {
    jwt.TimeFunc = func() time.Time {
        return time.Unix(0, 0)
    }
    tokenClaims, err := jwt.ParseWithClaims(token, &Claims{}, func(token *jwt.Token) (interface{}, error) {
        return jwtSecret, nil
    })
    if err != nil {
        return "", err,time.Now()
    }

    if claims, ok := tokenClaims.Claims.(*Claims); ok && tokenClaims.Valid {
        jwt.TimeFunc = time.Now
        expireTime := jwt.TimeFunc().Add(3 * time.Hour) //有效期 三个小时
        claims.StandardClaims.ExpiresAt = expireTime.Unix()
        get_tokens:=jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
        new_token,err:=get_tokens.SignedString(jwtSecret)
        return new_token,err,expireTime
    }
    return "", TokenInvalid,time.Now()
}

用户退出登录

包中暂未有修改token有效期的功能,所以对于用户退出登录需要自己实现,本人借鉴了广大网友提出的使用redis设置token黑名单的方法。
至此结束

相关文章

  • JWT用户登录机制

    最近使用gin框架开发程序,其中后台管理员登录使用jwt机制。具体jwt是啥,本文章不想搬运其他文章内容,各位自行...

  • jwt、session、oauth 异同

    1,jwt 和session机制 首先jwt 和session机制 都是用户认证的,oauth 不是 sessio...

  • JWT认证机制

    JWT认证机制session不可跨域,用户信息保存在服务器端;JWT可以跨域,用户信息保存在浏览器; JWT工作原...

  • JWT工具类

    一. 概述 在做用户登录时, 就会涉及到登录信息安全问题, 比较常见的加密方法就是用jwt加密, 本文将介绍jwt...

  • Django中的JWT

    JWT 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证。我们不再使用Session认证...

  • NestJS JWT 实现用户认证

    功能说明:client端使用用户名和用户密码登录,登录成功后server端发送JWT;client在header中...

  • (基础)golang+jwt实现用户登录获取token

    (基础)golang+jwt实现用户登录获取token 1.根据用户名/密码获取token ServiceJWT...

  • Django REST framework 的JWT Token

    接口需求:用户登录成功后,返回Django REST framework 的JWT Token, Token不存储...

  • 有图有真相:带你实现现流行的权限验证

    摘要:本文通过实例演示JWT实现登录授权流程。通过与传统的session、cookie和token机制进行对比,分...

  • JWT网关,基于kong

    说明 实现了Jwt拦截,登录时调用第三方登录接口。登录后会生成JWT-token,把返回的jwt-token放入h...

网友评论

      本文标题:JWT用户登录机制

      本文链接:https://www.haomeiwen.com/subject/ctjhwqtx.html