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

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是否已失效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值