当前位置: 首页 > 工具软件 > Passport.js > 使用案例 >

Passport.js - Node.js中身份认证

宦博超
2023-12-01

Passport.js - Node.js中身份认证

passport是Node中身份认证中间件,通过不同的策略(strategy)插件完成不同协议的认证,很大程度上简化了认证的过程。文章中使用了oauth2.0身份验证策略。

安装

> $ npm install passport
> $ npm install passport-oauth2

使用

app.js

var express = require('express');
var app = express();
var passport = require('passport');
var OAuth2Strategy = require('passport-oauth2');

passport.use('provider', new OAuth2Strategy({
        authorizationURL: 'https://xxx.oauth2.0/authorize',
        tokenURL: 'https://xxx./oauth2.0/token',
        clientID: 'xxxxxx',
        clientSecret: 'xxxxxxxx',
        callbackURL: `auth/callback`
    },
    function (accessToken, refreshToken, profile, done) {
        
        User.find(accessToken, () => {
            // 保存用户信息
            done(error, data);
        })
    }
));

// 为了以后使用,将用户数据序列化之后存到到session中
passport.serializeUser(function (user, done) {
    done(null, user);
});
// 反序列化
passport.deserializeUser(function (user, done) {

 User.findById(id, function (err, user) {
    done(err, user);
  });

});
// 路由
// 在connect风格程序中需要初始化
app.use(passport.initialize());
// 持久化
app.use(passport.session());

// 用于重定向到provider, http://localhost:4200/auth/provider
app.get('/auth/provider', passport.authenticate('provider'));

// 认证之后结果的回调函数
app.get('/auth/provider/callback',
  passport.authenticate('provider', { successRedirect: '/',
                                      failureRedirect: '/login' }));

常见问题

 InternalOAuthError: Failed to obtain access token
修改oauth2.0配置地址协议类型为https

Resolve error: passport.initialize() middleware not in use
添加   server.use(passport.initialize());

Failed to serialize user into session
// 代码中添加
passport.serializeUser(function (user, done) {
    done(null, user);
});

passport.deserializeUser(function (user, done) {
    done(null, user);
});

TokenError at OAuth2Strategy.parseErrorResponse
检查token是否已失效

 类似资料: