passport.authenticate('facebook') 等待本地主机超时
passport.authenticate('facebook') times out waiting for localhost
我正在尝试使用 passport-js 将 facebook 登录到现有的 express 应用程序中。在 documentation 之后,这似乎很向前 - 但现在我遇到了一个我不知道该怎么做的地方。
基本上,一旦我在浏览器中访问路由 /auth/facebook,浏览器就会超时等待服务器。控制台中没有错误 - 我只能看到请求的日志。在护照功能上放置断点也没有帮助。
所以我真的不知道我可以在这里调试或尝试更改什么。
这是我的用户模型:
let mongoose = require('mongoose');
let Schema = mongoose.Schema;
let findOrCreate = require('mongoose-findorcreate');
// User schema definition
let UserSchema = new Schema(
{
provider: { type: String, required: true },
id: { type: String, default: 'unknown' },
disaplyName: { type: String, default: 'unknown' },
name: { type: Object },
emails: { type: Array },
photos: { type: Array },
createdAt: { type: Date, default: Date.now },
updatedAt: { type: Date, default: Date.now },
}
);
UserSchema.plugin(findOrCreate);
// Sets the updatedAt parameter equal to the current time
UserSchema.pre('save', (next) => {
now = new Date();
if(!this.updatedAt) {
this.updatedAt = now;
}
next();
});
module.exports = mongoose.model('user', UserSchema);
facebook 路线:
let passport = require('passport');
let FacebookStrategy = require('passport-facebook').Strategy;
let User = require('../models/user');
passport.use(new FacebookStrategy({
clientID: 123456,
clientSecret: 'mysupersecretsecret',
callbackURL: 'http://localhost:1337/auth/facebook/callback'
},
(accessToken, refreshToken, profile, done) => {
User.findorCreate((err, user) => {
if (err) {
return done(err);
}
done(null, user);
})
}
));
function redirectFB() {
passport.authenticate('facebook');
}
function callbackFB() {
passport.authenticate('facebook'), {
successRedirect: '/word',
failureRedirect: '/'
}
}
module.exports = { redirectFB, callbackFB };
这些路由的服务器使用情况(我在这里只添加了服务器文件的相关部分):
let facebook = require('./app/routes/facebook')
app.route('/auth/facebook')
.get(facebook.redirectFB);
app.route('auth/facebook/callback')
.get(facebook.callbackFB);
谁能发现我做错了什么?
问题在于您如何定义和使用您的 facebook 路由。
调用 passport.authenticate
returns 请求处理程序,但您没有将其传递给 app.route(...).get
。你就是根本不用它。
例如redirectFB
应该是:
function redirectFB() {
return passport.authenticate('facebook');
}
和
app.route('/auth/facebook')
.get(facebook.redirectFB());
我正在尝试使用 passport-js 将 facebook 登录到现有的 express 应用程序中。在 documentation 之后,这似乎很向前 - 但现在我遇到了一个我不知道该怎么做的地方。
基本上,一旦我在浏览器中访问路由 /auth/facebook,浏览器就会超时等待服务器。控制台中没有错误 - 我只能看到请求的日志。在护照功能上放置断点也没有帮助。
所以我真的不知道我可以在这里调试或尝试更改什么。
这是我的用户模型:
let mongoose = require('mongoose');
let Schema = mongoose.Schema;
let findOrCreate = require('mongoose-findorcreate');
// User schema definition
let UserSchema = new Schema(
{
provider: { type: String, required: true },
id: { type: String, default: 'unknown' },
disaplyName: { type: String, default: 'unknown' },
name: { type: Object },
emails: { type: Array },
photos: { type: Array },
createdAt: { type: Date, default: Date.now },
updatedAt: { type: Date, default: Date.now },
}
);
UserSchema.plugin(findOrCreate);
// Sets the updatedAt parameter equal to the current time
UserSchema.pre('save', (next) => {
now = new Date();
if(!this.updatedAt) {
this.updatedAt = now;
}
next();
});
module.exports = mongoose.model('user', UserSchema);
facebook 路线:
let passport = require('passport');
let FacebookStrategy = require('passport-facebook').Strategy;
let User = require('../models/user');
passport.use(new FacebookStrategy({
clientID: 123456,
clientSecret: 'mysupersecretsecret',
callbackURL: 'http://localhost:1337/auth/facebook/callback'
},
(accessToken, refreshToken, profile, done) => {
User.findorCreate((err, user) => {
if (err) {
return done(err);
}
done(null, user);
})
}
));
function redirectFB() {
passport.authenticate('facebook');
}
function callbackFB() {
passport.authenticate('facebook'), {
successRedirect: '/word',
failureRedirect: '/'
}
}
module.exports = { redirectFB, callbackFB };
这些路由的服务器使用情况(我在这里只添加了服务器文件的相关部分):
let facebook = require('./app/routes/facebook')
app.route('/auth/facebook')
.get(facebook.redirectFB);
app.route('auth/facebook/callback')
.get(facebook.callbackFB);
谁能发现我做错了什么?
问题在于您如何定义和使用您的 facebook 路由。
调用 passport.authenticate
returns 请求处理程序,但您没有将其传递给 app.route(...).get
。你就是根本不用它。
例如redirectFB
应该是:
function redirectFB() {
return passport.authenticate('facebook');
}
和
app.route('/auth/facebook')
.get(facebook.redirectFB());