标签: passport-local

如果不应该,身份验证返回"401(未授权)"

我第一次设置了身份验证功能,并且在用户登录后得到了一些意想不到的结果.一位同事给了我一个带有工作身份验证的应用程序来模拟我的应用程序,看起来我所做的一切都是正确的.

我在前端使用AngularJS,SailsJS后端框架和PassportJS身份验证中间件.

我的源代码(现在)公开存储...后端API在Github上(API Github),前端代码在这里找到(前端Github)

基本上发生的是用户

  1. 点击登录按钮,触发此功能

    login: function (credentials) {
        return baseAuth.customPOST(credentials, 'login').then(function (user) {
            $log.debug('User logged in: ', user);
            isAuthenticated = true;
            return user;
        });
    },
    
    Run Code Online (Sandbox Code Playgroud)
  2. 该customPOST的控制器逻辑就是这个

    login: function (req, res, next) {
       passport.authenticate('local', function (err, user, info) {
           if (err) { return res.json(err); }
           else if (user) {
               req.logIn(user, function (err) {
                   if (err) { return res.json(err); }
                   return res.json(user);
               });
           } else { return res.json(400, info); }
    
       })(req, res);
    
    },
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在那一步,护照应该做它的事情并登录用户 …

authentication node.js angularjs sails.js passport-local

6
推荐指数
1
解决办法
1758
查看次数

使用passport-http Basic + passport-local组合时,如何防止www-authenticate标头

嗨,我想在我的应用程序中支持formbased身份验证和http基本身份验证.一切都按预期工作,除非我使用基于表单的auth通过angularjs与错误的凭据.

浏览器不显示我的角度代码处理401,而是显示由WWW-Authenticate标头引起的BASIC auth对话框.

如何在使用本地策略时阻止添加标头?或者我如何以不同的方式支持这两种机制?

我在基于Express的应用程序中使用以下路由.

api.post('/authenticate', passport.authenticate(['local', 'basic'], { session: false }), function (req, res) {
Run Code Online (Sandbox Code Playgroud)

这将在该URL上启用两种身份验证方法.我再说一遍,当我使用formbased使用错误的凭据时,它会向我显示基本的auth对话框(我不希望这样).

以下是我如何注册策略.

passport.use(new BasicStrategy({ realm: 'Authentication failed. Wrong username or password.'}, verifyLocalUser));
passport.use(new LocalStrategy(verifyLocalUser));
Run Code Online (Sandbox Code Playgroud)

这就是我的verifyUser方法的样子......

var verifyLocalUser = function (username, password, next) {
    User.findOne({
        username: username
    }).select('fullname admin username password').exec(function (err, user) {
        if (err) {
            return next(err);
        }

        if (user && user.comparePasswords(password)) {
            return next(null, user);
        } else {
            next(null, false, { message: 'Authentication failed. Wrong username or password.' });
        }
    });
} …
Run Code Online (Sandbox Code Playgroud)

node.js express angularjs passport-local passport.js

6
推荐指数
1
解决办法
460
查看次数

Express Passport.js成功重定向不加载页面,请求保持挂起

我正在尝试使用passport.js和本地护照进行基本的用户名/密码验证.

虽然failureRedirect完全按照它应该执行的操作(重定向到指定页面),但successRedirect对其指定页面的请求保持挂起状态,并在一段时间后返回"空响应".

http://www.deviantpics.com/VdG

正如您在此图片中所看到的那样,当它请求仪表板时,它表示它的大小为0B,但是当我继续使用该仪表板而没有重定向时它表示它有1.6B.

我遍布Stackoverflow,我找不到能帮到我的答案.

在我疯狂之前,你能检查我的代码并提出一些建议.

这是护照加载代码

//set expression
var expressSession = require('express-session');
app.use(expressSession({
    secret: credentials.session.secret
}));

//set passport
var passport = require('passport');

var localStrategy = require('./strategies/auth/local.js');
passport.use('local', localStrategy);

passport.serializeUser(function(user, done) {
    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user) {
        done(err, user);
    });
});

app.use(passport.initialize());
app.use(passport.session());
Run Code Online (Sandbox Code Playgroud)

routes.js

module.exports = function(app){

module.exports = function(app) {

//main
app.get('/', main.home);
app.get('/login', main.login);
app.get('/signup', main.signup);
app.post('/login', auth.loginLocal);
app.post('/signup', main.checkSignup);

//user
app.get('/user/dashboard', user.dashboard);
app.get('/user/addmemory', user.addMemory);
app.get('/user/memory', user.memory);
Run Code Online (Sandbox Code Playgroud)

登录功能

exports.loginLocal = passport.authenticate('local', {
    successRedirect: …
Run Code Online (Sandbox Code Playgroud)

javascript node.js express passport-local passport.js

6
推荐指数
1
解决办法
4102
查看次数

Mean.js req.isAuthenticated显示失败?

我已经下载了meanjs version@0.1.12.我已经使用了两个服务器用于前端我hvae使用angular with ionic它在localhost:3000中运行,对于后端我使用了meanjs.in that meanjs我创建了注册,登录和文章.当我使用meansjs作为后端和前端它工作正常.但是当我连接到另一台服务器(localhost:3000)注册并且签名工作正常但是当我创建文章时我得到401未经授权的那个请求的bcoz .isAuthenticated()函数.当我创建文章模块req.isAuthenticated()获取fail.req.isAuthenticated()我不应该通过这个功能我已经包括我的代码任何人帮助我

现在我传递这样的数据

    $http.post('http://192.168.1.14:3000/articles', credentials).success(function(response,data,errorResponse) {
            // If successful we assign the response to the global user model
            //$scope.authentication.user =response;
             console.log(response);

             console.log(data);
            // And redirect to the index page
            $location.path('/tab/account');
        }, function(response,data,errorResponse) {
            $scope.error = errorResponse.data.message;
            console.log($scope.error);
            console.log(data);
        });
Run Code Online (Sandbox Code Playgroud)

路线:

app.route('/articles')
        .get(users.requiresLogin,articles.list)
        .post(users.requiresLogin,articles.create);
Run Code Online (Sandbox Code Playgroud)

登录检查

/**
 * Require login routing middleware
 */
exports.requiresLogin = function(req, res, next) {
    //console.log(req.isAuthenticated());
    console.log(req);
    if (!req.isAuthenticated()) {
        return res.status(401).send({
            message: 'User is not logged in'
        });
    }

    next();
};

/** …
Run Code Online (Sandbox Code Playgroud)

node.js express passport-local meanjs passport.js

6
推荐指数
1
解决办法
218
查看次数

Passport本地临时密码(首次登录时更改)

出于安全原因,我们创建用户并向他们发送临时生成的密码.在第一次登录时,用户应该在继续导航受保护的页面之前更改其密码.

我正在使用运行护照本地模块的快递/节点网站.注册,登录用户所有工作.但是,我有点迷失在用户首次登录时更改密码的最佳做法.

我的想法是做以下事情:

/* POST login page. */
router.post('/login', function(req, res, next) {
  passport.authenticate('local', { successRedirect: '/dashboard/users',
    failureRedirect: 'pages/login'}, function(err, user, info) {
    if(err) {
      console.log('')
      return res.render('pages/login', {title: 'Login', error: err.message});
    }

    if(!user) {
      return res.render('pages/login', {title: 'Login', error: info.message});
    }
    return req.logIn(user, function(err) {
      if(err) {
        return res.render('pages/login', {title: 'Login', error: err.message});
      } else if (user.firstLogin) {
        return res.redirect('/change-password'); // <- First login
      } else {
        return res.redirect('/dashboard/users');
      }
    });
  })(req, res, next);
}); …
Run Code Online (Sandbox Code Playgroud)

express passport-local passport.js

6
推荐指数
1
解决办法
693
查看次数

ValidationError:MongooseError.ValidationError的用户验证失败

我正在尝试使用mongoDb创建一个带有护照本地身份验证的简单node.js应用程序并将其表达为框架,但我遇到了问题

每当我尝试使用注册表单将数据提交到数据库中时,在单击提交后,它立即显示在节点终端中: 节点终端

这是我的用户架构的样子:

    var mongoose = require('mongoose');
var bcrypt   = require('bcrypt-nodejs');

// define the schema for our user model
var userSchema = mongoose.Schema({

    local            : {
        name    : String,
        username     : String,
        mobile       : Number,
        email        : String,
        gender       : String,
        password     : String

    }
});

// methods ======================
// generating a hash
userSchema.methods.generateHash = function(password) {
    return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};

// checking if password is valid
userSchema.methods.validPassword = function(password) {
    return bcrypt.compareSync(password, this.local.password);
};

// create the model …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb node.js express passport-local

6
推荐指数
1
解决办法
9520
查看次数

使用passportjs进行Nuxt身份验证?

如何使用JWT(后端快递)将nuxt auth模块(前端)与本地护照一起使用?

定义 jwt 策略以验证 jwt 令牌(express)

    var JwtStrategy = require('passport-jwt').Strategy,
        ExtractJwt = require('passport-jwt').ExtractJwt;
    var opts = {}
    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
    opts.secretOrKey = 'secret';
    opts.issuer = 'accounts.examplesoft.com';
    opts.audience = 'yoursite.net';
    passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
        User.findOne({id: jwt_payload.sub}, function(err, user) {
            if (err) {
                return done(err, false);
            }
            if (user) {
                return done(null, user);
            } else {
                return done(null, false);
                // or you could create a new account
            }
        });
    }));
Run Code Online (Sandbox Code Playgroud)

定义用于验证用户名和密码的本地策略(快速)

    passport.use(new LocalStrategy(
      function(username, password, done) …
Run Code Online (Sandbox Code Playgroud)

passport-local passport.js nuxt.js passport-jwt

6
推荐指数
1
解决办法
3106
查看次数

为什么使用 Passport 本地策略与 jwt 策略相结合

您好,我正在尝试构建一个 NestJS API,并想学习实现它的最佳实践。

所以我想知道为什么 Nest JS 的文档

https://docs.nestjs.com/security/authentication

passport-local是否提供了耦合和策略身份验证的示例passport-jwt

难道不能只使用 吗passport-jwt

如果答案是肯定的,但这不是一个好的做法,您能否提供解释。

如果答案是肯定的并且这是最佳实践,您是否知道为什么他们在身份验证等如此重要的主题上举了一个没有使用最佳实践的示例?

node.js passport-local passport.js nestjs passport-jwt

6
推荐指数
1
解决办法
2910
查看次数

如何知道用户是否使用passport.js跨子域登录

我已经分别在domain.comsub.domain.com中创建了两个Mean.io应用程序,一切都按预期工作,但问题是子域(sub.domain.com)中的那个需要知道用户是否登录主应用程序(domain.com).

我知道护照会处理会话并知道用户是否已登录,因为它在req中为express.js中的每个请求创建了一个用户对象:

if (req.user) {
    // logged in
} else {
    // not logged in
}
Run Code Online (Sandbox Code Playgroud)

这里的不便之处在于,这种方法可以在域内工作,但不能在外部工作.换句话说,如果我向这样的后端发出请求:

$http.get('/api/users/me').success(this.onIdentity.bind(this));
Run Code Online (Sandbox Code Playgroud)

来自domain.com,这将填充用户数据,但如果我直接从浏览器发出相同的请求,它将返回null.

我需要了解如何跨域传递此信息?如果每次发出此请求$http.get('/api/users/me').success(this.onIdentity.bind(this));,信息都会传递给后端?

javascript node.js mean.io passport-local passport.js

5
推荐指数
1
解决办法
216
查看次数

使用快速会话和passportjs无法从存储中正确获取会话

我正在使用passport,express-session而且connect-pg-simple.

问题是会话没有从存储中正确获取,它正确地(我希望,但怀疑)保存.

我的设置是一样的,就像很多教程一样,我已经找到了.

server.js:

import express from 'express';
import next from 'next';
import bodyParser from 'body-parser';
import session from 'express-session';
import connectPgSimple from 'connect-pg-simple';
const sessionStorage = connectPgSimple(session);
import initAuthentication from '!/server/authentication';

const dev = process.env.NODE_ENV !== 'production'; // eslint-disable-line
const port = process.env.PORT || 3000; // eslint-disable-line
const app = next({ dev });

app.prepare()
.then(() => {
  const server = express();

  server.use(express.static('public'));

  /* Note Since version 1.5.0, the cookie-parser middleware no …
Run Code Online (Sandbox Code Playgroud)

node.js express passport-local passport.js express-session

5
推荐指数
1
解决办法
616
查看次数