- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我参加 NodeJS 类(class)和观看教程有一段时间了,并决定在应用中充分利用它们。
对于这个项目,我需要用户注册和登录,以便将他们的事件存储在数据库中。这个过程我是用Passport做的,这部分项目的代码是这样的:
/****** Passport functions ******/
passport.serializeUser(function (user, done) {
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
db.user.findOne( { where : { idUser : id } }).then(function (err, user) {
done(err, user);
});
});
//Facebook
passport.use(new FacebookStrategy({
//Information stored on config/auth.js
clientID: configAuth.facebookAuth.clientID,
clientSecret: configAuth.facebookAuth.clientSecret,
callbackURL: configAuth.facebookAuth.callbackURL,
profileFields: ['id', 'emails', 'displayName', 'name', 'gender']
}, function (accessToken, refreshToken, profile, done) {
//Using next tick to take advantage of async properties
process.nextTick(function () {
db.user.findOne( { where : { idUser : profile.id } }).then(function (err, user) {
if(err) {
return done(err);
}
if(user) {
return done(null, user);
} else {
db.user.create({
idUser : profile.id,
token : accessToken,
nameUser : profile.displayName,
email : profile.emails[0].value,
sex : profile.gender
});
return done(null);
}
});
});
}));
app.use(express.static(__dirname + '/public/'));
/* FACEBOOK STRATEGY */
// Redirect the user to Facebook for authentication. When complete,
// Facebook will redirect the user back to the application at
// /auth/facebook/callback//
app.get('/auth/facebook', passport.authenticate('facebook', { scope : ['email']}));
/* FACEBOOK STRATEGY */
// Facebook will redirect the user to this URL after approval. Finish the
// authentication process by attempting to obtain an access token. If
// access was granted, the user will be logged in. Otherwise,
// authentication has failed.
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { successRedirect: '/app',
failureRedirect: '/' }));
app.get('/', function (req, res) {
res.render('/');
});
app.get('/app', isLoggedIn, function (req, res) {
res.sendFile('app.html');
});
function isLoggedIn(req, res, next) {
if(req.isAuthenticated()) {
return next();
} else {
res.redirect('/');
}
}
我在使用 Passport 的 Facebook Auth 上遵循的教程使用了几乎相同的代码,我更改了用户模型,因为该教程使用了 Mongoose 而我正在使用 Sequelize但这方面效果很好,当我点击注册 FB 时,它会注册或登录,查询会完成工作。
但是,不起作用的是重定向。当我使用 facebook 注册时,它卡住了并且不加载任何内容(滚轮在 index.html(FB 按钮所在的位置)上不断旋转并且不加载任何内容)。当我使用 facebook 登录时,它只在屏幕上显示:
[object SequelizeInstance:user]
在教程中,讲师使用 EJS 作为模板语言,但是我已经使用 HTML、CSS 和 jQuery(是的,应该使用 React 或 Angular 但时间敏感并且是已经在学习 Node)。我相信这是发生这种情况的原因之一,但我不能 100% 确定这里发生了什么,为什么我会收到错误或如何解决。
感谢任何帮助,如果需要更多信息/代码,请告诉我。谢谢
最佳答案
所以经过大量的调试和一些很好的帮助之后,我找出了导致我的问题的原因,实际上那里有三个错误。
首先,在 Facebook 战略中,我应该这样构建它:
passport.use(new FacebookStrategy({
//Information stored on config/auth.js
clientID: configAuth.facebookAuth.clientID,
clientSecret: configAuth.facebookAuth.clientSecret,
callbackURL: configAuth.facebookAuth.callbackURL,
profileFields: ['id', 'emails', 'displayName', 'name', 'gender']
}, function (accessToken, refreshToken, profile, done) {
//Using next tick to take advantage of async properties
process.nextTick(function () {
db.user.findOne( { where : { idUser : profile.id } }).then(function (user, err) {
if(err) {
return done(err);
}
if(user) {
return done(null, user);
} else {
//Create the user
db.user.create({
idUser : profile.id,
token : accessToken,
nameUser : profile.displayName,
email : profile.emails[0].value,
sex : profile.gender
});
//Find the user (therefore checking if it was indeed created) and return it
db.user.findOne( { where : { idUser : profile.id } }).then(function (user, err) {
if(user) {
return done(null, user);
} else {
return done(err);
}
});
}
});
});
}));
db.user.findOne 切换参数后的回调,所以它每次都给我一个错误,即使它没有一个,所以我切换了那些并且还添加了一个查询来在数据库中查找用户在创建它之后能够返回它。
在第二条 facebook 路线上,我是这样构建它的:
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { failureRedirect: '/' }),
function(req, res) {
// Successful authentication, redirect home.
res.redirect('../../app.html');
});
这让我可以继续使用 HTML(以后我可能会重写它以使用更好的 View ),并且在测试中,我能够从 req.user 获取信息。
最后,我在 Passport 的 serializeUser 上有一个小的命名错误:
passport.serializeUser(function (user, done) {
done(null, user.idUser);
});
只是将 user.id 更改为 user.idUser 以保持我使用的命名约定。
希望这可以帮助其他人使用 Sequelize with Passport。
关于javascript - NodeJS 护照 Facebook OAuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37969780/
假设有一个应用程序有 10 个动态页面(可能是表单),其中 8 个页面是受限的(需要用户登录应用程序),另外 2 个页面可供匿名用户使用。 我的前端应用程序是在 Angular 2 中开发的,后端 A
我正在将 Passport-facebook 与 ExpressJS 和 PassportJS 一起使用 我想知道如何将显示参数设置为触摸,以便当我们的 Android 设备获取登录并允许应用程序所需
我有一个nodeJS应用程序(express),它有一个facebook登录。我正在使用 Passport-facebook 身份验证,如此处所述 passport-facebook 。几周前我的登录
我正在尝试了解在使用 Passport-facebook 和 Node/express 时 Facebook 身份验证如何工作。 我对回调URL 和下面的函数感到困惑。 有人可以向我解释一下设置回调U
我有一个问题 - 我正在为我的 api 使用 Laravel Passport。我需要编写测试。每当我在测试中使用 WithoutMiddleware 特性时,它都会禁用我使用的 Implicit r
我对 Telegram Bot API 有点陌生,在机器人中我想通过 Telegram Passport 验证用户的年龄 我正在尝试重新创建他们的 Javascript SDK .按钮出现并打开 Te
如 laravel-passport 中所述登录 Controller 由 php artisan make:auth 制成在我们的路由器中 web.php会有 Auth::routes();我们 c
Laravel 上有 API,它使用 Laravel Passport 进行身份验证。一切都在默认设置下运行良好。然后我们决定将访问 token 的生命周期相应地更改为 1 天和 1 个月。它导致刷新
目前我有一个使用 Laravel Passport 的 Laravel 安装(它使用 league/oauth2-server 作为服务器实现)。我想在授予 oauth2 token 时返回用户 ID
我试图实现护照 Facebook 我在 server.js 中的代码如下所示当用户通过 facebook 点击登录时使用的路由 router.get('/auth/facebook',
我正在使用 laravel v5.8、VueJS 和 passport v7.4 进行身份验证。下面是我的登录函数: public function login(Request $request)
我尝试在 heroku 上安装我的应用程序。这个应用程序是一个 php-laravel 应用程序,带有用于身份验证的“护照”。在我的本地机器(mac os)上一切正常。 当我尝试与 postman 进
我参加 NodeJS 类(class)和观看教程有一段时间了,并决定在应用中充分利用它们。 对于这个项目,我需要用户注册和登录,以便将他们的事件存储在数据库中。这个过程我是用Passport做的,这部
我正在尝试使用 Passport-local 来限制对网站的访问。 为此,我使用login_app来运行passport-local,但这本身就是从主app.js调用的路由。当尝试在第二层(护照文件/
在我使用护照注册用户并在数据库中查看用户后。我尝试登录,但收到消息“未经授权”。这是我的登录方法: public function login(){ if(Auth::attempt(['em
我看了很多关于 Laravel passport 的文章和视频,但仍然无法理解一些东西。 我有一个适用于 Laravel 5.5 + vueJs 的应用程序。所有对后端的请求都是通过 axios 发送
所以我想对我的 API 端点进行单元测试。我正在使用 Laravel 5.8 并且 api 身份验证是使用 Passport 完成的我有以下测试: public function guest_can_
我想知道当从 API 调用中注销用户时,在 Laravel 护照的oauth_access_tokens 表中管理 token 的最佳方法是什么? 目前我只为token设置了8小时的有效期,并把所有的
CreateFreshApiToken,一旦添加到 Kernel.php 中的“web”中间件组,应该附加 laravel_token cookie 以响应通过 web 中间件发出的每个请求,不是吗?
我正在尝试安装 Laravel Passport在 Laravel 5.7.18 上使用 PHP 7.2.13。 我的应用程序使用 JavaScript(Axios 和 Vue)在自身内部使用 API
我是一名优秀的程序员,十分优秀!