使用 Passport 进行社交身份验证登录后如何重定向到个人资料页面? (角度,快递,护照,jwt)
Posted
技术标签:
【中文标题】使用 Passport 进行社交身份验证登录后如何重定向到个人资料页面? (角度,快递,护照,jwt)【英文标题】:How to redirect to profile page after social auth login with Passport ? (Angular, express, passport, jwt) 【发布时间】:2020-09-05 14:06:51 【问题描述】:我正在使用护照在我的应用上使用 FB 或 Google 登录。
如果配置文件不存在,我会成功创建配置文件,但现在我不明白如何在我想登录时将这些信息发送到前面。
我尝试了很多类似使用res.cookie(blabla)
的东西,但不能在前面使用它。 res.send(blabla)
只要打开一个json文件。
我确实错过了一些东西,但我不知道是什么。
这是我的passportjs文件:
import passport from 'passport';
import UsersService from './../services/users.service';
import AuthService from './../services/auth.service';
import * as jwt from 'jsonwebtoken';
let FacebookStrategy = require('passport-facebook').Strategy;
const usersService = UsersService.getInstance();
module.exports = function ()
passport.use('facebook', new FacebookStrategy(
clientID : CLIENTID,
clientSecret : CLIENTSECRET,
callbackURL : 'http://localhost:3000/auth/facebook/callback',
profileFields: ['id', 'emails', 'name']
,
function(access_token:any, refresh_token:any, profile:any, done:any)
process.nextTick(function()
usersService.getByEmail(profile.emails[0].value).then((result) =>
if(result.email == profile.emails[0].value)
console.log('EXISTE');
const userToken =
email: result.email,
id: result.id
;
const secret: any = process.env.JWT_SECRET;
const token = jwt.sign(userToken, secret);
let newUser : any = result;
newUser.jwtoken = token;
console.log(newUser)
return done(null, newUser)
else
console.log('EXISTE PAS')
let user: any =
email : profile.emails[0].value,
username : profile.username
usersService.create(user).then(result =>
return done(null, user)
)
)
);
))
这是我的路线文件:
router.get('/facebook', passport.authenticate('facebook', scope: 'email' ))
router.get('/facebook/callback',
passport.authenticate('facebook',
session: false,
failureRedirect : 'http://localhost:4200/auth/signin'
), (req: any, res: Response) =>
let token: any = req.user.jwtoken;
res.send(token).redirect('http://localhost:4200/')
);
【问题讨论】:
【参考方案1】:所以我尝试了另一种重定向:
router.get('/facebook', passport.authenticate('facebook', scope: 'email' ))
router.get('/facebook/callback',
passport.authenticate('facebook',
session: false,
failureRedirect : 'http://localhost:4200/auth/signin'
), (req: any, res: Response) =>
let user: any = req.user;
res.redirect('http://localhost:3000/users/me', user);
);
现在我有一个错误:
FacebookTokenError: This authorization code has been used.
at Strategy.parseErrorResponse (/home/alex/eygdev/EYG_post-WCS-internship/node_modules/passport-facebook/lib/strategy.js:198:12)
at Strategy.OAuth2Strategy._createOAuthError (/home/alex/eygdev/EYG_post-WCS-internship/node_modules/passport-oauth2/lib/strategy.js:405:16)
at /home/alex/eygdev/EYG_post-WCS-internship/node_modules/passport-oauth2/lib/strategy.js:175:45
at /home/alex/eygdev/EYG_post-WCS-internship/node_modules/oauth/lib/oauth2.js:191:18
at passBackControl (/home/alex/eygdev/EYG_post-WCS-internship/node_modules/oauth/lib/oauth2.js:132:9)
at IncomingMessage.<anonymous> (/home/alex/eygdev/EYG_post-WCS-internship/node_modules/oauth/lib/oauth2.js:157:7)
at IncomingMessage.emit (events.js:203:15)
at IncomingMessage.EventEmitter.emit (domain.js:448:20)
at endReadableNT (_stream_readable.js:1145:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
我真的不明白为什么会出现这个错误,因为没有人登录我的网站。
【讨论】:
以上是关于使用 Passport 进行社交身份验证登录后如何重定向到个人资料页面? (角度,快递,护照,jwt)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用分离的后端和前端(Passport / Express / React)进行社交身份验证
使用 Passport 和 OAuth2 + 社交网络的 NodeJS REST 身份验证