gpt4 book ai didi

node.js - 本地主机上的 Passport 谷歌oauth

转载 作者:IT老高 更新时间:2023-10-28 23:04:07 24 4
gpt4 key购买 nike

我在使用 Passport 通过 Node 进行身份验证方面非常陌生,因此有很多代码片段

我的服务器配置为:

var router = require('./app/config/routes');
var googleStrategy = require('./app/config/passport');
var session = require("express-session");

var passport = require('passport');
app.use(session({secret : '<secret-key>'}));
app.use(passport.initialize());
app.use(passport.session());
googleStrategy(passport);

我的路线配置为

module.exports = function(app, passport) {

app.get('/auth/google', function() {
passport.authenticate('google', {scope: ['profile', 'email']});
});

app.get('/auth/google/callback', function() {
passport.authenticate('google', {
successRedirect: '/profile',
failureRedirect: '/fail'
});
});

.... ALSO configured /profile and /fail
};

我的 Passport 配置为

passport.serializeUser(function(user, callback){
console.log('serializing user.');
callback(null, user);
});

passport.deserializeUser(function(user, callback){
console.log('deserialize user.');
callback(null, user);
});

var processRequest = function(token, refreshToken, profile, callback){
process.nextTick(function(){
console.log('id : '+ profile.id);
console.log('name :'+ profile.displayName);
console.log('email :' + profile.emails);
console.log('token : '+ token);
});
};

passport.use(new GoogleStrategy({
clientID: 'client ID',
clientSecret : 'client SECRET',
callbackURL : 'http://127.0.0.1:8080/auth/google/callback',
realm : 'http://127.0.0.1:8080'
}, processRequest));

问题:去 /auth/google 时,我从来没有得到确认屏幕。我应该看什么?

更新:

将路由更改为如下所示的配置使其工作。

    app.get('/auth/google', 
passport.authenticate('google', {scope: ['profile', 'email']})
);

app.get('/auth/google/callback',
passport.authenticate('google', {
successRedirect: '/profile',
failureRedirect: '/fail'
})
);

最佳答案

目前 google 很好地支持 OAUTH2 身份验证和授权协议(protocol),所以最好使用相同的。 Here is google 的文档。使用 'passport-google-oauth' 模块。这是实现。这应该是应用程序对象配置,还可以看到从 passport-google-oauth 模块中使用了 oauth2strategy 对象,还可以查看 app.get 路由注册中的范围。

var googleStrategy = require('passport-google-oauth').OAuth2Strategy;
app.configure(function() {

app.set('views', './views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.session({secret:'MySecret'}));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static('./public'));
});

app.get('/auth/google', select.passport.authenticate('google',{scope: 'https://www.googleapis.com/auth/plus.me https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile'}));

app.get('/auth/google/callback', function() {
passport.authenticate('google', {
successRedirect: '/profile',
failureRedirect: '/fail'
});
});
app.get('/logout', function (req, res) {
req.logOut();
res.redirect('/');
});

但在创建新策略之前,请转到谷歌开发者控制台并获取 clientID 和 secret 。以下是步骤

  1. 去这个 link并创建项目,这里是相同 enter image description here 的快照
  2. 给一个新的项目名称和 ID,这里是快照 enter image description here
  3. 创建新项目大约需要一分钟,创建新项目后,它会将您重定向到应用的应用程序配置。在重定向页面中选择 APIS AND AUTH -> API's ,在 API 页面中启用 GOogle+ API ,这是它的快照 enter image description here
  4. 然后转到凭据(在 API 下方),然后单击 Create New Client Id ,并为您的应用注册域和回调(将域配置为 localhost ),这里是它的快照! enter image description here5.然后你会得到你的新ID和 secret 。使用它们来创建新的策略

    passport.use(new googleStrategy({
    clientID: '<TheNewclientID>',
    clientSecret: '<The New Secret>',

    callbackURL: "http://locahost:8080/auth/google/callback"
    },
    function (accessToken, refreshToken, profile, done) {
    console.log(profile); //profile contains all the personal data returned
    done(null, profile)
    }
    ));

6.现在序列化和反序列化

passport.serializeUser(function(user, callback){
console.log('serializing user.');
callback(null, user.id);
});

passport.deserializeUser(function(user, callback){
console.log('deserialize user.');
callback(null, user.id);
});

运行服务器并转到 localhost:8080/auth/google(不要使用 127.0.0.1:8080 而不是 locahost )。这应该可以正常工作:)

[其他有用的链接:在 this 中查看 kvcrawford 对模块 repo 的第一条评论页Passport-google 是另一个流行的模块,用于使用 google 提供登录,现在有点过时了,这里是 link关于它最近的问题]

关于node.js - 本地主机上的 Passport 谷歌oauth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24352975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com