Cookies身份验证概述

作者 : IT 大叔 本文共2017个字,预计阅读时间需要6分钟 发布时间: 2020-09-14

即使您已经熟悉了将cookie保存到Web浏览器的过程,但是整个过程通常会变得有些冗长且令人困惑,尤其是与第三方访问委派结合使用时。现在,显然,如果您不是开发人员,那么这对您都不重要,但是,如果您是开发人员,那么肯定有很多有用的信息可用于了解此过程,即使您不是直接使用身份验证也是如此。

尽管cookie有许多目的,但正如我所暗示的,我要谈论的目的是快速无缝身份验证。我确信您在网站上遇到了无数次,尤其是在Facebook,Twitter,YouTube等社交网站上。您登录一次,并且每次登录后都再次登录。

从概念上讲,您可以认为此过程非常类似于大衣检查或代客泊车。一旦您将汽车与代客车一起离开,他们需要一些独特的识别信息,以便您下次下次再向他们展示并向他们展示时,便能够迅速与您的汽车联系起来,以便他们知道该怎么做您。

同样,当您首次登录网站帐户时,服务器上会生成一个cookie并将其发送回浏览器,然后您的浏览器会存储该cookie。当您不可避免地离开该网站时,下次您回来时,浏览器将显示该网站提供给它的cookie。然后,该网站的服务器将找到与该Cookie关联的帐户,并将其发送回您的浏览器。

除了为用户提供便利之外,服务器还可以更轻松地跟踪每个用户。随着用户数据在服务器接收到的每个请求中被注入,服务器然后可以执行特定于正在请求它的用户的所述请求。

现在,让我们看一下使用Express,Passport和Google OAuth在Node服务器上进行此过程的示例。

passport.use(new GoogleStrategy({
  clientID: OAUTH_CLIENT_ID,
  clientSecret: CLIENT_SECRET,
  callbackURL: '/auth/google/redirect',
},
(async (accessToken, refreshToken, profile, done) => {
  const { familyName, givenName } = profile.name;
  let user = await User.findOne({ where: { id: profile.id } });
  if (!user) {
    user = await User.create({
      first_name: givenName,
      last_name: familyName,
      email: profile.emails[0].value,
      photo: profile.photos[0].value,
    });
  }
  done(null, user);
})));

上面是一个Passport实例,该实例在服务器上用于向Google进行身份验证以注册用户。从Google登录页面重定向回原始网站后的初始注册过程中,触发了上述代码段后半部分中显示的异步回调函数。在该功能中,您可以看到它首先使用从Google获得的信息来检查该用户是否已存在于其连接的数据库中。如果用户不存在,它将使用该信息创建一个帐户。

在其连接的数据库中为用户创建一个条目之后,服务器将从中获取一个唯一标识的信息,并创建一个cookie以发送回浏览器。这就像代客给您一张票,让他们在下次您回来时向他们展示,只是稍微复杂一点。由于其他人无法轻易伪造或猜测此信息,因此Passport和其他类似服务将在发送回该信息之前使用一种加密形式来对该信息进行加密。那就是Passport serializeUser()方法的用武之地。

passport.serializeUser((user, done) => {
  done(null, user.googleId);
});

此方法在传递cookie并将其发送回浏览器之前执行上述加密。在上面的示例中,用户的Google ID被用作唯一标识信息。

最后,如您所料,有一个随附的deserializeUser()用户方法可以逆转此过程,并在下次浏览器向该Cookie发出请求时查找用户的帐户,看起来有点像这样:

passport.deserializeUser(async (googleId, done) => {
  const user = await User.findOne({ where: { googleId } });
  done(null, user);
});

结论

我确实只涉及了整个过程的表面,但这应该使您更好地了解其工作原理。身份验证是任何Web应用程序中必不可少的部分,Cookie可以使该过程成为用户和开发人员的无缝体验。有关完整协作的完整教程和解释,我强烈建议您查看以下YouTube播放列表:https : //www.youtube.com/playlist?list=PL4cUxeGkcC9jdm7QX143aMLAqyM-jTZ2x

** 在设置样板代码和安装模块时,请务必参考以下文档:http : //www.passportjs.org/docs/google/,因为视频中的某些具体细节似乎是有点过时了。

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » Cookies身份验证概述

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论