令牌认证/授权与PassportJS
Token Authentication/Authorization With PassportJS
我目前正在为一个将在多个平台上发布的应用程序开发一个基于Node/express的API。因此,我需要基于令牌而不是会话/cookie对用户进行身份验证/授权。
在做了一些研究之后,我发现PassportJS是一个很好的插件来完成这样的事情。不幸的是,在浏览了几个小时的文档之后,似乎没有任何关于原始的基于令牌的身份验证的好的解释。
我不想使用任何插件,如JWT -只有护照,Express,和MongoDB。
如何使用Passport实现基于令牌的用户授权系统?我需要关于令牌生成、令牌传递和其余过程的解释。
请用清晰简洁的方式回答这个问题,就像你在向一个五年级的学生解释一样。
谢谢:)
我试着把你的问题分成几个部分:
- <
- 配置护照/gh>
- 护照在哪里使用
- 杂项注释
首先,一个小小的误解。Passport没有捆绑代币生成系统。Passport被设计为使用必须作为依赖项包含的策略进行配置。这样做是为了让Passport本身变得轻便和模块化。当您需要本地(用户名和密码)身份验证策略时,我可能需要使用Twitter进行身份验证。所以,Passport两者都不包括。我安装我需要的,并保持包的大小轻。
TL;DR:没有办法不为Passport安装插件。你需要包含某种策略。
我假设您想使用本地策略。因此,您需要passport-local。别担心,这是《护照》的作者贾里德·汉森写的。
我使用的大部分内容都来自Passport文档,特别是这里。
让我们看看配置:
- 安装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期望凭据在名为用户名和密码的参数中。有一些配置选项可以以其他方式命名它们,例如使用电子邮件而不是用户名登录。
- 函数参数中的数据与指定变量之间的任何性能差异
- 为什么这在IE中的工作方式与在Firefox中不同
- 与其他库的jQuery.noConflict()
- 将Firebase与Electron结合使用
- 转义符不能与innerHTML一起使用
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- cron作业与Javascript计时事件
- 如何使用铁流星与流星的默认路线
- 用与线条相同的颜色填充多折线图上的点
- JSON重构(合并内容)与javascript
- 将Angular js与taglib结合使用
- 如何在javascript中获得与特定数字相等的随机数
- 使用声明式授权的“without_access_control”与 Cucumber 的@javascript
- 当与Angularjs混合使用时,MVC授权不起作用
- Rails应用程序与Airbrake - 401未经授权
- 令牌认证/授权与PassportJS
- Node express react oauth在与react客户端应用程序的回调中授权后通过访问令牌
- Firebase直接授权与电子邮件和密码
- 下载锚链接与授权头
- iOS文件传输不工作与授权头