如何在使用Passport进行社交认证登录后重定向到个人资料页面?(Angular, express, passport, jwt)

问题描述 投票:0回答:1

我正在使用护照来实现在我的应用程序上登录FB或谷歌。

我成功地创建了一个不存在的个人资料,但现在我不明白当我想登录时如何将这些信息发送到前面。res.cookie(blabla),但前面不能用。res.send(blabla) 只是打开一个json文件。

我肯定漏掉了什么,但我不知道是什么。

这是我的护照js文件。

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/')
        }
    );
angular express jwt passport.js passport-facebook
1个回答
0
投票

所以,我尝试了其他的事情的重定向。

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)

我真的不明白为什么我得到这个错误 因为没有人登录我的网站。

© www.soinside.com 2019 - 2024. All rights reserved.