Web开发

注册

 

发新话题 回复该主题

GoWeb开发认证请求 [复制链接]

1#
上一篇文章实现了客户端通过发送认证信息获得身份验证token,那么让我们看看如何使用该token来验证用户,实现服务端准确地知道请求来自哪个用户。本质上,一旦客户端有了一个认证token,后续访问API服务时后端服务将从客户端Authorization请求头中获取token,像这样p>Authorization:BearerIEYZQUBEMPPAKPOAWTPV6YJ6RM当我们收到这些带认证token请求时,将使用一个新的authenticate()中间件方法来执行以下逻辑:如果认证token无效,我们将向客户端返回Unauthorized响应以及一个错误消息,让调用者知道他们的token是无效的。如果认证token有效,查询用户详细信息,然后将用户详细信息添加到请求上下文当中。如果没有提供Authorization请求头,API服务会添加一个匿名用户信息到请求上下文中。创建匿名用户我们从上面所述的最后一点开始,先在internal/data/user.go中定义一个匿名用户,如下所示:File:internal/data/user.go

packagemain...var(ErrDuplicateEmail=errors.New("duplicateemail")AnonymousUser=User{}//声明一个匿名用户变量)typeUserstruct{IDint64`json:"id"`CreateAttime.Time`json:"create_at"`Namestring`json:"name"`Emailstring`json:"email"`Passwordpassword`json:"-"`Activatedbool`json:"activated"`Versionint`json:"-"`}//检查用户是否为匿名用户func(u*User)IsAnonymous()bool{returnu==AnonymousUser}...这里我们创建一个新的AnonymousUser变量,存放指向一个User结构体指针表示用户没有ID、name、email或password且未激活。我们还为User结构体实现了一个IsAnonymous()方法,因此只要是User实例就可以判断是否为AnonymousUser实例,例如:

data.AnonymousUser.IsAnonymous()//→返回trueotherUser:=data.User{}otherUser.IsAnonymous()//→返回false读写请求上下文在我们开始创建authenticate()中间件之前,另一个设置步骤涉及到在请求上下文中存储用户详细信息。先大概介绍下请求上下文(requestcontext):应用程序处理的每个

分享 转发
TOP
发新话题 回复该主题