是否有一个使用PostgreSQL设置PassportJS的演练教程(即用PostgreSQL替换MongoDB)?
使用护照JS成功登录时出现此错误.登录后尝试重定向到主页.
执行它的代码:
app.post('/login',
passport.authenticate('local', {failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
Run Code Online (Sandbox Code Playgroud)
完全错误:
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (http.js:644:11)
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?不确定为什么会发生这种错误.我仍然可以使用该应用程序,我只是不想要错误.
我使用sequelize作为ORM和passport.js(护照本地)进行身份验证.我注意到每个HTTP请求都会产生一个单独的数据库命令.我开始查看deserializeUser()函数.
加载单个页面时,这就是我得到的:
执行:SELECT*FROM
UsersWHEREUsers.id= 1 LIMIT 1;一遍一遍又一遍!
GET/200 12ms - 780
执行:SELECT*FROM
UsersWHEREUsers.id= 1 LIMIT 1;执行:SELECT*FROM
UsersWHEREUsers.id= 1 LIMIT 1;一遍一遍又一遍!
GET /js/ui.js 304 4ms
一遍一遍又一遍!
GET /stylesheets/main.css 304 6ms
执行:SELECT*FROM
UsersWHEREUsers.id= 1 LIMIT 1;一遍一遍又一遍!
GET /images/logo.jpg 304 3ms
以下是passport.deserializeUser的外观:
passport.deserializeUser(function(id, done) {
User.find(id).success(function(user) {
console.log('Over and over and over!');
done(null, user);
}).error(function(err) {
done(err, null);
}); …Run Code Online (Sandbox Code Playgroud) 我是PassportJS和AngularJS的新手,我对如何继续这项授权表示怀疑.
我有Spring REST API由Oauth2保护,但我必须像这样发送用户凭据:
[http://localhost:8080/myapp/oauth/token]
grant_type=password&username=email&password=password&client_id=09e749d8309f4044&client_secret=189309492722aa5a&scope=read
Run Code Online (Sandbox Code Playgroud)
在客户端我的应用程序我使用护照,我想授权/验证我的用户,我怎么能为此创建一个Stratagy?
我将发送我的服务器配置和我的安全库.
Server.js
var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey = fs.readFileSync(__dirname + '/cert/privatekey.pem').toString();
var certificate = fs.readFileSync(__dirname + '/cert/certificate.pem').toString();
var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var config = require('./config.js');
var passport = require('passport');
var security = require('./lib/security');
var xsrf = require('./lib/xsrf');
var protectJSON = require('./lib/protectJSON');
require('express-namespace');
var app = express();
var secureServer = https.createServer(credentials, app);
var server = http.createServer(app);
// Serve …Run Code Online (Sandbox Code Playgroud) 我正在开发一个nodejs应用程序并使用passportjs进行身份验证.我正在使用当地的护照策略.但是当我尝试登录时,我收到以下错误:
Error: Unknown authentication strategy "local"
at attempt (/home/project/node_modules/passport/lib/middleware/authenticate.js:166:37)
at authenticate (/home/project/node_modules/passport/lib/middleware/authenticate.js:338:7)
at exports.authenticate (/home/project/controllers/RegistrationsController.js:87:4)
at callbacks (/home/project/node_modules/express/lib/router/index.js:164:37)
at param (/home/project/node_modules/express/lib/router/index.js:138:11)
at pass (/home/project/node_modules/express/lib/router/index.js:145:5)
at Router._dispatch (/home/project/node_modules/express/lib/router/index.js:173:5)
at Object.router (/home/project/node_modules/express/lib/router/index.js:33:10)
at next (/home/project/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at /home/project/node_modules/express-flash/lib/express-flash.js:31:7
Run Code Online (Sandbox Code Playgroud)
这是我的passport-config.js文件:
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('../models/user');
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});
passport.use({usernameField: 'emailAddress'}, new LocalStrategy(function(username, password, done) {
User.findOne({ emailAddress: username }, function(err, user) { …Run Code Online (Sandbox Code Playgroud) 我正在使用strongloop loopback后端进行角度应用.
我还使用loopback-passport模块通过facebook整合第三方登录.
在loopback-example-passport中一切都很好,在重定向到我的应用程序之前,我的应用程序中的一切都很好.已创建用户和访问令牌.
代码:
app.get('/auth/login', ensureLoggedIn('/#login'), function(req, res, next) {
console.log('LOOGED IN!!');
console.log(req.user);
res.redirect('/#auth/login');
});
Run Code Online (Sandbox Code Playgroud)
工作良好.但我无法理解.如何为我的角度应用程序提供经过身份验证的状态
我试图让控制器路由'/#auth/login':
.controller('AuthCalbackCtrl', function($scope, $cookies, $location, AppAuth, $http, User, LoopBackAuth) {
//analogue of User.login responce interceptor
LoopBackAuth.currentUserId = $cookies['userId'] || null;
LoopBackAuth.accessTokenId = $cookies['access-token'] || '';
LoopBackAuth.rememberMe = false;
LoopBackAuth.save();
//asking for currentUser
User.getCurrent(function(user) {
console.log('ser.getCurrent ', user);
});
$location.path('/');
})
Run Code Online (Sandbox Code Playgroud)
此代码发出请求GET/api/users/2但收到401错误.
如果我调整文件/loopback/lob/models/user.js设置权限:
principalType: ACL.ROLE,
// principalId: Role.OWNER,
principalId: Role.EVERYONE,
permission: ACL.ALLOW,
property: "findById"
Run Code Online (Sandbox Code Playgroud)
然后请求GET/api/users/2接收200并且一切正常.
我有点困惑.虽然我知道access-token和userId,但我无法理解如何使我的角度应用程序进行身份验证以进行环回
有任何想法怎么做?
我已经更新了我的npm版本,我认为npm audit是一个新功能.我可以跳过吗?因为当我运行npm audit我的一些软件包时,版本是从package.json更改的,我只想保持软件包和我的同事一样
我正在使用护照本地策略来验证用户身份.我按照Jared Hanson给出的指南安装了connect-flash,以便为req对象提供flash方法.所以我的一个请求处理程序如下:
app.post('/login',
passport.authenticate('local', {
successRedirect: '/'
, failureRedirect: '/login'
, successFlash: 'Bienvenido'
, failureFlash: 'Credenciales no válidas'
})
);
Run Code Online (Sandbox Code Playgroud)
当用户登录失败时,它会再次将用户重定向到/ login,但它不会闪现任何东西:/
更新:我使用mongodb进行会话存储,我看到了这个:
> db.sessions.find()
{ "_id" : "qZ2eiTnx6r9LR25JOz/TGhiJ", "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":\"4ffb5b5db9cc16b615000001\"},\"flash\":{\"error\":[\"Credenciales no válidas\"],\"success\":[\"Bienvenido\"]}}" }
Run Code Online (Sandbox Code Playgroud)
因此,消息将插入到会话对象中,但不会将其拉出.我应该做些特别的事吗?
我如何在Passport.js中执行此操作?:
当访问令牌过期时,您可以使用refresh_token"刷新"您的访问权限,并获得另一个access_token.要使用refresh_token,您需要向grant-endpoint执行POST请求,并将grant_type设置为refresh_token:
https://podio.com/oauth/token?grant_type=refresh_token&client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&refresh_token=REFRESH_TOKEN
Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的登录表单,使用Jade和Express at/login,表单数据通过POST发送到/ login
起初它只是基于字符串的匹配(如果用户名== &&密码==)然后重定向到/ home或重定向到/ login
简单.
现在我想让它存储在mongodb数据库中的数据库驱动程序,用户名和密码,匹配db的用户名密码并执行程序.
我希望使用passportJS,但我完全不知所措,从创建数据库到配置护照.
有人可以帮助我如何制作一个简单的数据库驱动的登录页面?我对nodejs的东西很新.任何帮助都会受到重视
passport.js ×9
node.js ×8
express ×3
angularjs ×2
connect ×1
javascript ×1
login ×1
loopbackjs ×1
mongodb ×1
npm ×1
npm-install ×1
oauth-2.0 ×1
package.json ×1
sequelize.js ×1