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
|
|
对用户对话进行“编解码”,由应用层决定并完成编解码方式,并且不受认证层的干扰和限制。
内置操作
Log In
Passport提供了req.login()
别名req.logIn()
的方法完成对话创建。
注意,passport.authenticate()
中间件已经包含了对此方法的调用。一般只在允许用户注册成功后立即将其账户登录时,手动调用req.login()
完成对话的创建。
Authorize
现在很多应用会有这样的需求:允许用户用N个第三方账户登录系统。于是就需要让用户进行多个第三方的授权,即通常所说的Connect。中文多对应为“绑定”。
当然用户一般可以随时“解绑”~
这样用户就可以同时绑定微博和QQ以及人人网等账号,并在随后用任意的方式登录应用。如此一来用户体验会得到提升,并且应用可以获得找到潜在用户的途径,不解释 → →
当然对于绑定来说,用户首先(不管用哪一方)要能登录到应用中来,然后才可能绑到已经登录的账号上。
对于这种需求,passport提供了另一个接口passport.authorize()
User Profile
标准化用户信息的常用字段:
provider
{String} 认证方,提供认证的第三方服务的名称id
{String} 用户在第三方的标识IDdisplayName
{String} 顾名思义,在第三方显示用的名字,相当于昵称name
{Object}familyName
{String} 姓氏,西方文化中的 Last namegivenName
{String} 名字,对应 First NamemiddleName
{String} 中文没有对应概念,一般只出现在一些西方国家的人名中,涉及较少
emails
{Array}[n]value
{String}实际存放邮件地址的字段type
{String}按照标准区分电子邮箱用途,如家庭,工作等
photos
{Array}[n]value
{String}实际存放图片地址的字段
以上只是较为基本常用的信息字段,各个第三方提供的个人信息不仅相同,通常还是需要查看具体的官方相关说明。
需要提一下,两个我时常会混淆的单词:
- Authorize [ˈɔːθəraɪz] 授权
- Authenticate [ɔː’θentɪkeɪt] 认证,验证
To Be Append…