Passport笔记

Things to be notice 写在前面:这篇文主要是Passport官方文档的阅读笔记,多有纰漏,仅做参考。This post only notes things need to be noted while taking advantage of Passport.

Passport是一个可扩展的(用户)认证框架;
Passport借助于其丰富可选的认证策略帮你搭建现代的用户认证系统。(包括OAuth以及OpenID)

Strategies

Before asking Passport to authenticate a request, the strategy (or strategies) used by an application must be configured.

在使用Passport进行(用户)认证之前,必须配置你的应用需要使用的认证策略。

比如使用LocalStrategy可以搭建单纯的用户名密码认证(即登录,注册等)。

Verify Callback

认证回调用于验证用户是否拥有登录资格
function (username, password, done)

通过done回调函数返回认证结果

done(error, user, info)

中间件

在以Connect或者Express为基础的应用中,需要用到passport.initialize()这个中间件来对Passport进行初始化。
另外如果需要启用Session来保存用户对话,还需要在系统启用session后(即app.use(express.session());)引入passport.session()中间件
才可以保证对话能被成功地存起来。

If enabled, be sure to use express.session() before passport.session() to ensure that the login session is restored in the correct order.

Sessions

1
2
3
4
5
6
7
8
9
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});

对用户对话进行“编解码”,由应用层决定并完成编解码方式,并且不受认证层的干扰和限制。

内置操作

Log In

Passport提供了req.login()别名req.logIn()的方法完成对话创建。
注意,passport.authenticate()中间件已经包含了对此方法的调用。一般只在允许用户注册成功后立即将其账户登录时,手动调用req.login()完成对话的创建。

Authorize

现在很多应用会有这样的需求:允许用户用N个第三方账户登录系统。于是就需要让用户进行多个第三方的授权,即通常所说的Connect。中文多对应为“绑定”。
当然用户一般可以随时“解绑”~

这样用户就可以同时绑定微博和QQ以及人人网等账号,并在随后用任意的方式登录应用。如此一来用户体验会得到提升,并且应用可以获得找到潜在用户的途径,不解释 → →

当然对于绑定来说,用户首先(不管用哪一方)要能登录到应用中来,然后才可能绑到已经登录的账号上。

对于这种需求,passport提供了另一个接口passport.authorize()

User Profile

标准化用户信息的常用字段:

  • provider{String} 认证方,提供认证的第三方服务的名称
  • id{String} 用户在第三方的标识ID
  • displayName{String} 顾名思义,在第三方显示用的名字,相当于昵称
  • name{Object}
    • familyName{String} 姓氏,西方文化中的 Last name
    • givenName{String} 名字,对应 First Name
    • middleName{String} 中文没有对应概念,一般只出现在一些西方国家的人名中,涉及较少
  • emails{Array}[n]
    • value{String}实际存放邮件地址的字段
    • type{String}按照标准区分电子邮箱用途,如家庭,工作等
  • photos{Array}[n]
    • value{String}实际存放图片地址的字段

以上只是较为基本常用的信息字段,各个第三方提供的个人信息不仅相同,通常还是需要查看具体的官方相关说明。

需要提一下,两个我时常会混淆的单词:

  1. Authorize [ˈɔːθəraɪz] 授权
  2. Authenticate [ɔː’θentɪkeɪt] 认证,验证

To Be Append…