使用 PassportJS 的令牌 Authentication/Authorization
Token Authentication/Authorization With PassportJS
我目前正在为将在多个平台上分发的应用程序开发 Node/Express-based API。因此,我将需要 authenticate/authorize 用户基于令牌而不是 sessions/cookies。
经过一番研究,我发现 PassportJS 是完成此类任务的绝佳插件。不幸的是,在浏览了几个小时的文档之后,似乎没有对基于原始令牌的身份验证有任何好的解释。
我不想使用任何插件,例如 JWT -- 只是 Passport、Express 和 MongoDB。
我将如何使用 Passport 实现基于令牌的用户授权系统。我需要有关令牌生成、令牌传递和其余过程的解释。
请像给五年级学生解释一样,简明扼要地回答这个问题。
谢谢:)
我将尝试将您的问题分解为几个部分:
- 配置护照
- 在哪里使用 Passport
- 杂项总结
首先,一个轻微的误解。 Passport 不与令牌生成系统捆绑在一起。 Passport 旨在配置您必须作为依赖项包含的策略。这样做是为了使 Passport 本身可以是轻量级和模块化的。当您需要本地(用户名和密码)身份验证策略时,我可能需要使用 Twitter 进行身份验证。因此,Passport 两者都不包括。我安装我需要的东西并保持包装尺寸轻。
TL;DR: 没有办法不为 Passport 安装插件。您需要包含某种 策略。
我假设您想使用本地策略。所以,你需要 passport-local。别担心,它是 Passport 的作者 Jared Hanson 写的。
我使用的大部分内容都来自 Passport 文档,特别是 here。
我们来看配置:
- 安装 Passport 和 passport-local 模块。
- 确保 Express、MongoDB、Node、npm 等是最新的。
passport-local 的基本配置文件如下所示:
var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username ), function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
现在您需要在网页上放置一个表单。这是一个非常基本的例子:
<form action="/login" method="post">
<div>
<label>Username:</label>
<input type="text" name="username" />
</div>
<div>
<label>Password:</label>
<input type="password" name="password" />
</div>
<div>
<input type="submit" value="Log In" />
</div>
</form>
接下来,您需要在 Express 应用程序中创建路线。有关其工作原理的更多信息,请参阅 Express Routing Documentation。
app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' })
);
参数注意事项:默认情况下,LocalStrategy 期望凭据位于名为 username 和 password[ 的参数中=52=]。有一些配置选项可以以其他方式命名它们,例如使用电子邮件而不是用户名登录。
我目前正在为将在多个平台上分发的应用程序开发 Node/Express-based API。因此,我将需要 authenticate/authorize 用户基于令牌而不是 sessions/cookies。
经过一番研究,我发现 PassportJS 是完成此类任务的绝佳插件。不幸的是,在浏览了几个小时的文档之后,似乎没有对基于原始令牌的身份验证有任何好的解释。
我不想使用任何插件,例如 JWT -- 只是 Passport、Express 和 MongoDB。
我将如何使用 Passport 实现基于令牌的用户授权系统。我需要有关令牌生成、令牌传递和其余过程的解释。
请像给五年级学生解释一样,简明扼要地回答这个问题。
谢谢:)
我将尝试将您的问题分解为几个部分:
- 配置护照
- 在哪里使用 Passport
- 杂项总结
首先,一个轻微的误解。 Passport 不与令牌生成系统捆绑在一起。 Passport 旨在配置您必须作为依赖项包含的策略。这样做是为了使 Passport 本身可以是轻量级和模块化的。当您需要本地(用户名和密码)身份验证策略时,我可能需要使用 Twitter 进行身份验证。因此,Passport 两者都不包括。我安装我需要的东西并保持包装尺寸轻。
TL;DR: 没有办法不为 Passport 安装插件。您需要包含某种 策略。
我假设您想使用本地策略。所以,你需要 passport-local。别担心,它是 Passport 的作者 Jared Hanson 写的。
我使用的大部分内容都来自 Passport 文档,特别是 here。
我们来看配置:
- 安装 Passport 和 passport-local 模块。
- 确保 Express、MongoDB、Node、npm 等是最新的。
passport-local 的基本配置文件如下所示:
var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username ), function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
现在您需要在网页上放置一个表单。这是一个非常基本的例子:
<form action="/login" method="post">
<div>
<label>Username:</label>
<input type="text" name="username" />
</div>
<div>
<label>Password:</label>
<input type="password" name="password" />
</div>
<div>
<input type="submit" value="Log In" />
</div>
</form>
接下来,您需要在 Express 应用程序中创建路线。有关其工作原理的更多信息,请参阅 Express Routing Documentation。
app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' })
);
参数注意事项:默认情况下,LocalStrategy 期望凭据位于名为 username 和 password[ 的参数中=52=]。有一些配置选项可以以其他方式命名它们,例如使用电子邮件而不是用户名登录。