javascript - 使用 PassportJS 进行 token 认证/授权

标签 javascript node.js mongodb express passport.js

我目前正在为将分布在多个平台上的应用程序开发基于 Node/Express 的 API。因此,我需要根据 token 而不是 session /cookie 对用户进行身份验证/授权。

经过一些研究,我发现 PassportJS 是一个很棒的插件,可以完成这样的事情。不幸的是,在浏览了几个小时的文档后,似乎没有对基于原始 token 的身份验证有任何好的解释。

我不想使用 JWT 等任何插件 - 只是 Passport、Express 和 MongoDB。

我将如何使用 Passport 实现基于 token 的用户授权系统。我需要有关 token 生成、 token 传递以及其余过程的解释。

请以清晰简洁的方式回答这个问题,就像向五年级学生解释一样。

谢谢:)

最佳答案

我将尝试将您的问题分解为几个部分:

  • 配置 Passport
  • 在哪里使用 Passport
  • 其他结束语

首先,一个轻微的误解。 Passport 不与 token 生成系统捆绑在一起。 Passport 旨在配置您必须作为依赖项包含的策略。这样做是为了让 Passport 本身变得轻便且模块化。当您需要本地(用户名和密码)身份验证策略时,我可能需要使用 Twitter 进行身份验证。所以, Passport 两者都不包含。我安装我需要的东西并保持包大小较小。

TL;DR:没有办法不安装 Passport 插件。您需要包含某种策略

我假设您想使用本地策略。因此,您需要本地 Passport 。别担心,它是由 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 希望凭据位于名为用户名密码 的参数中。有配置选项可以以其他方式命名它们,例如使用电子邮件而不是用户名登录。

关于javascript - 使用 PassportJS 进行 token 认证/授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39650240/

相关文章:

stored-procedures - MongoDB 存储过程等价物

javascript - “Ended”HTML5 事件未绑定(bind)到绑定(bind)后创建的元素上

javascript - 在 Express 中停止执行已取消的请求

javascript - 使用索引更新集合中的嵌套数组

node.js - Yeoman 生成器发布到 npm 后不包含子生成器

javascript - NodeJS Needle 处理与 url 和 statusCode 匹配的异步请求数组

sql - 如何将数据从 MongoDB 迁移到 SQL-Server?

javascript - 除了 input[type=text] 之外的所有内容都禁用选择

javascript - Dotnet 返回 URL 缺少参数

javascript - 如何通过从另一个进程提供参数来执行文件