标签: passport-local

用expressjs猫鼬护照本地修改密码

首先,我是法语,我的英语不太好,我会尽力而为:)

我使用PassportJs,Mongoose和Expressjs(v3.x)创建了本地身份验证。它运作完美。登录用户后,在/ account /空间中,我创建了一个用于更改当前密码的表单(3个输入:pass,newpass,newpassconfirm)。但是之后,我不知道如何处理...

我是否必须创建另一个通行证LocalStrategy来查找我的用户并调用在我的用户架构中声明的“ setPassword”函数?我可以不使用passport.js来执行此操作吗?如果有可能,我如何让我的用户访问数据库?

这是我的认证有效的代码。

我的/ login POST(/routes/user.js)

app.post('/login', function(req, res, next) {
    passport.authenticate('local-login', function(err, user, info) {
        if (err) { 
            return next(err); 
        }

        if (!user) { 
            return res.redirect('/login'); 
        }

        req.logIn(user, function(err) {
            if (err) { 
                return next(err); 
            }

            req.session.pseudo = user.pseudo;
            return res.redirect('/');
        });
    })(req, res, next);
});
Run Code Online (Sandbox Code Playgroud)

我的护照脚本(/script/passport.js)

passport.use('local-login', new LocalStrategy({
    usernameField : 'pseudo',
    passwordField : 'pass',
    passReqToCallback : true // permet de passer l'objet req dans le callback
}, function (req, pseudo, pass, done) { …
Run Code Online (Sandbox Code Playgroud)

change-password mongoose node.js express passport-local

4
推荐指数
1
解决办法
7610
查看次数

passport.js是否支持ajax?

我想用passport.js进行ajax登录.我有通常的代码来设置passport.js:

//route
app.post('/api/auth/login', passport.authenticate('local-login', {
    successRedirect: '/',
    failureRedirect: '/login'
}));

//config strategy
passport.use('local-login', new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
    passReqToCallback: true
}, loginUser));

var loginUser = function(req, email, password, done) {

    UserRepo.getOne({
        'local.email': email
    }).done(function(user) {

            if (!user || !user.validPassword(password)) {
                return done(null, false, {
                    message: 'user or password is incorrect'
                });
            }

            return done(null, user);

        },
        function(err) {
            return done(err);
        });
};
Run Code Online (Sandbox Code Playgroud)

这是我的react组成部分:

var Login = React.createClass({
  //...
  handleSubmit: function (e) {
        e.preventDefault();

        var email = this.state.email.trim(); …
Run Code Online (Sandbox Code Playgroud)

node.js reactjs passport-local passport.js

4
推荐指数
1
解决办法
3193
查看次数

基于sailsjs jwt令牌的身份验证示例

我正在关注本教程.

但是当我sails lift运行我的应用程序时,我遇到了错误.

抛出新的TypeError('JwtStrategy需要一个函数来从请求中检索jwt(参见选项jwtFromRequest)');
^

TypeError:JwtStrategy需要一个函数来从请求中检索jwt(参见选项jwtFromRequest)

请帮我解决这个错误.

node.js jwt sails.js passport-local passport.js

4
推荐指数
1
解决办法
1733
查看次数

为什么我的Passport auth功能在路由中调用时没有执行?

我正在使用Passport来保护MEAN堆栈应用程序的前端和后端.该应用程序的结构如下:

monstermash
    config // server configuration
    public // static directory that will serve the entire Angular frontend
    app
        index.js // initialization of the server
        models 
            index.js // mongoose schemas and models
        passport 
            index.js // configuration for passport and all my strategies
        routes 
            index.js // basic route definitions for the API (using functions defined under v1, below) and UI (routes defined inline here for simplicity's sake)
                v1
                    index.js // all the functions called to power the API routes
Run Code Online (Sandbox Code Playgroud)

这是app/index.js因为我知道有时候需要以正确的顺序调用应用程序中间件: …

node.js express passport-local passport.js

4
推荐指数
1
解决办法
750
查看次数

PassportJS 重命名“用户”对象

我正在使用 PassportJS 进行登录功能有没有办法更改请求中的“用户”对象名称?

默认情况下,这就是它现在的工作方式(req.user):

function (req, res, next) {
    if (!req.user) {
        req.flash('error', 'Please sign in to access this page.');
        res.redirect('/login');
    } else {
        next();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想改用以下内容(req.candidate):

function (req, res, next) {
    if (!req.candidate) {
        req.flash('error', 'Please sign in to access this page.');
        res.redirect('/login');
    } else {
        next();
    }
}
Run Code Online (Sandbox Code Playgroud)

authentication mongodb node.js passport-local passport.js

4
推荐指数
1
解决办法
906
查看次数

如何通过电子邮件而不是passport.js中的用户名进行身份验证?

我目前正在使用此代码登录:

passport.use(new localStrategy({
  usernameField: 'username'
}, User.authenticate()));
Run Code Online (Sandbox Code Playgroud)

当我使用用户名和密码登录时,这很好用。现在我想用电子邮件而不是用户名登录。我已将代码更改为:

passport.use(new localStrategy({
  usernameField: 'email',
  usernameQueryFields: ['email']
}, User.authenticate()));
Run Code Online (Sandbox Code Playgroud)

我还更改了我的 HTML 代码以显示带有电子邮件名称的电子邮件字段:

<input type="text" name="email" id="email" placeholder="Your Email" class="form-control">
Run Code Online (Sandbox Code Playgroud)

这是我的用户的架构:

{
    "_id" : ObjectId("585f62d63158ec1f608f82a2"),
    "salt" : "d7fd24ab337be7341bb6c54df69eccdce607a6cffc8457be4d44",
    "hash" : "(long text)",
    "username" : "joseph320",
    "email" : "joseph@gmail.co",
    "name" : "joseph",
    "__v" : 0,
}
Run Code Online (Sandbox Code Playgroud)

所以现在它应该在数据库中查找电子邮件字段,并将其与登录表单中提供的电子邮件用户进行比较。但它不起作用。当我尝试使用电子邮件和密码登录时,它给了我“无效的用户名或密码”错误。

但是当我尝试使用用户名和确切密码登录时,它会成功登录。问题出在哪里,我该如何解决?

我正在使用此软件包进行身份验证:

"passport": "^0.3.2",
"passport-local": "^1.0.0",
"passport-local-authenticate": "^1.2.0",
"passport-local-mongoose": "^4.0.0",
Run Code Online (Sandbox Code Playgroud)

node.js passport-local passport.js

4
推荐指数
3
解决办法
5317
查看次数

如何在控制器中使用护照中间件

试图设置护照本地。使用本指南作为灵感。

我遇到的问题是,当我从路由文件调用函数到控制器文件时,它不起作用。如果我将控制器文件中的代码放在路由文件中,它就可以工作。

这是我的 app.js

const express       = require('express');
const bodyParser    = require('body-parser');
const passport      = require('passport');
const flash         = require('connect-flash');
const morgan        = require('morgan');
const cookieParser  = require('cookie-parser');
const session       = require('express-session');

const Data = require('./app/models/data.js');
const User = require('./app/models/user.js');

require('./config/passport')(passport)

// create express app
const app = express();

// set the view engine to ejs
app.set('view engine', 'ejs');

// parse requests of content-type - application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }))

// parse requests of content-type - application/json
app.use(bodyParser.json()) …
Run Code Online (Sandbox Code Playgroud)

mongodb node.js express passport-local passport.js

4
推荐指数
1
解决办法
3461
查看次数

NodeJS | SailsJS | PassportJS AJAX身份验证:对数据进行连续请求

连续请求数据

TL; DR

身份验证后,我无法从我的应用程序的前端请求数据 - 但只能通过服务器端视图和Postman我可以在登录后进行后续数据请求,或者通过在Postman中对我的用户进行身份验证然后在我的数据请求中进行数据请求应用程序.

首先,我是服务器端的新手.

我有一个SailsJS后端,我正在使用REST.使用LocalStrategy创建和验证用户工作正常 - 实际上,甚至使后续数据请求工作正常 - 但不是通过我的应用程序的AJAX.

我可以使用Postman或服务器端视图来访问数据,例如/list; 在我的应用程序中进行身份验证后发出请求不起作用 - 除非我跳回Postman并登录,然后跳回我的应用程序并重新发送请求.

我注意到set-cookie我的应用程序在第一个身份验证请求和请求之间有所不同/list.

如果有必要,我可以展示一些代码,但这似乎是我在制作经过身份验证的AJAX请求时缺少一个非常高级的基本概念.

编辑: 我的前端在不同的领域-帆上运行localhost:1337,而我的UI上运行localhost:8100.

这是我的/api/config/cors.js样子:

module.exports.cors = {

  allRoutes: true,

  origin: '*',

  credentials: true,

  // methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD',

  // headers: 'content-type'

};
Run Code Online (Sandbox Code Playgroud)

我在前端使用了角度,随后的请求正在使用withCredentials: true- 我是否需要将此添加到登录请求中?我是否必须在请求中同时发送用户名/电子邮件?

如何在登录后允许我的所有后续数据验证请求?

authentication ajax sails.js passport-local passport.js

3
推荐指数
1
解决办法
300
查看次数

没有密码字段的护照登录认证

我正在使用nodejs和express来构建用户注册.我正在创建一个没有任何护照或任何身份验证策略的新用户.我想要的是用户应该在注册成功后被视为已登录.所以我正在为用户构建登录api.用户只能使用电子邮件字段进行真实身份验证(因为我没有使用用户存储任何密码).但我无法验证用户,因为我在护照身份验证中收到"缺少凭据".

app.js

var config = require('./config/development');
var passport = require('passport');
var cookieParser = require('cookie-parser');
var bodyParser   = require('body-parser');
var session      = require('express-session');

var  app = express();

//connect db 
mongoose.connect(config.db);
mongoose.set('debug', config.mongoose.debug);

require('./config/passport')(passport); // pass passport for configuration

//initialize all models
var modelsPath = require('path').join(__dirname, 'models');
require('fs').readdirSync(modelsPath).forEach(function(file) {
  require('./models/' + file);
});


// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');


app.use(logger('dev'));
app.use(bodyParser.json());
app.use(expressValidator());

app.use(bodyParser.urlencoded({
  extended: false
}));
app.use(cookieParser());

/// required for passport
app.use(session({
secret: 'anystringoftext',
saveUninitialized: true,
resave: true …
Run Code Online (Sandbox Code Playgroud)

node.js passport-local

3
推荐指数
1
解决办法
4113
查看次数

如何在护照LocalStrategy回调中获取http request.body或request

只是想在 LocalStrategy 的回调中获取 http 请求或 request.body,正如您在附件中看到的那样,我们像这样编码 new LocalStrategy({ usernameField: 'email', passwordField: 'pwd' },(username: any, password :any,done:any) => { 我们能够获取用户名和密码,但我想获取整个 req.body

  1. 我想获取在登录请求中传递的一些附加信息,并希望将此附加信息存储为创建的会话的一部分。
  2. 我尝试使用护照的 req.logIn() 方法来解决此问题,方法是在 Passport.authenticate('local',callback) 的回调中。
  3. 它有效,但这里的问题是 Passport.serialize 方法被调用两次,因此它创建了两个会话。我想避免创建双重会话。
  4. 因此我认为的解决方案是通过 LocalStrategy 方法获取附加信息。

代码

import UserDetailsRepo from '../../repo/UserDetailsRepo'
import UserDetails from '../../model/UserDetails'
import * as passport from 'passport'
import { Strategy as LocalStrategy } from 'passport-local'
// import JwtConfiguration from './express-jwt-config'
import * as HttpStatus from 'http-status-codes'

class PassportAuth {
    public passport: any;
    constructor() {
        this.passport = passport.use(new LocalStrategy({
            usernameField: 'email', …
Run Code Online (Sandbox Code Playgroud)

authentication node.js passport-local

3
推荐指数
1
解决办法
4419
查看次数