packagedata...const(ScopeActivation="activation"ScopeAuthentication="authentication"//增加一个新的认证标识)//定义Token结构体接收token数据。包括token字符串和哈希值,以及用户ID,过期时间和范围。typeTokenstruct{Plaintextstring`json:"token"`Hash[]byte`json:"-"`UserIDint64`json:"-"`Expirytime.Time`json:"expiry"`Scopestring`json:"-"`}...这些结构体字段标签只有Plaintext和expiry字段需要序列化到Token结构体中,其他字段可以忽略。我们还将Plaintext字段重命名为“token”,因为这对客户端来说比plaintext更直观。总之,当我们将一个Token结构体编码为JSON时,结果将类似于:
{"token":"X3ASTT2CDAN66BACKSCI4SU7SI","expiry":"-01-18T13:00:25.+01:00"}接口创建现在我们进入本节重点,实现POST/v1/tokens/authentication接口到代码。当接口完成后,我们的API路由看起来像这样:MethodURLPatternHandler动作POST/v1/tokens/authenticationcreateAuthenticationTokenHandler生成一个新的认证token如果你跟随本系列文章操作,请创建新的cmd/api/tokens.go文件:
$touchcmd/api/tokens.go在这个文件当中,我们需要创建createAuthenticationTokenHandler处理程序。本质上这个接口处理程序的目标是根据收到的用户email地址和密码生成一个认证tokens返回给客户端。File:cmd/api/tokens.go
packagemainimport("errors""greenlight.alexedwards.net/internal/data""greenlight.alexedwards.net/internal/validator""net/