基于Express实现Passport用户名和密码登陆认证

Passport项目是一个基于Nodejs的认证中间件。

Passport可以根据应用程序的特点,配置不同的认证机制。本文将介绍,用户名和密码的认证登陆。

1.express项目安装这里就不多说了,可以去express中文网拉下项目;

http://www.expressjs.com.cn/

2.安装依赖;

npm install passport
npm install passport-local

passport-local

使用用户名和密码进行本地身份验证。通过插入Passport,本地身份验证可以集成到支持中间件(包括express )的应用程序或框架中 。

3.配置中间件;

var express = require(‘express‘);
var session = require(‘express-session‘);
var passport = require(‘passport‘);

app.use(passport.initialize());
app.use(passport.session());

引入依赖并且初始化。

4.验证策略

var LocalStrategy = require(‘passport-local‘);

// 用户名密码验证策略
passport.use(new LocalStrategy({
        usernameField: ‘username‘,
        passwordField: ‘password‘
    },
    function (name, password, done) {
        UserModel.findOne({ name: name }).then(function (result) {
            if (result != null) {
                if (result.password == password) {
                    return done(null, result);
                } else {
                    return done(null, false, { message: ‘密码错误‘ });
                }
            } else {
                return done(null, false, { message: ‘用户不存在‘ });
            }
        }).catch(function (err) {
            return done(null, false, { message: err.message });
        });
    }
));

5.session序列化与反序列化

验证用户提交的凭证是否正确,是与session中储存的对象进行对比,所以涉及到从session中存取数据,需要做session对象序列化与反序列化:

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

6.拦截请求

var express = require(‘express‘);
var router = express.Router();

var passport = require(‘passport‘);
// 登录认证
router.post(‘/login‘, function (req, res, next) {
    passport.authenticate(‘local‘, { successRedirect: ‘/‘, failureRedirect: ‘/login‘ })(req, res);
});

OK,大功告成。

  

原文地址:https://www.cnblogs.com/chyblog/p/8386075.html

时间: 2024-10-13 08:19:11

基于Express实现Passport用户名和密码登陆认证的相关文章

Express结合Passport实现登陆认证和Passport现实社交网络OAuth登陆

Express结合Passport实现登陆认证 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都很流畅.Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低.非常适合小型网站,个性化网站,我们自己的Geek网站!! 关于作者 张丹(Co

eclipse/ggts/myeclipse清除SVN用户名和密码

很多时候我们在使用eclipse/myeclipse/ggts这些开发工具进行开发的时候会有多个项目存在,不同的项目又存放在不同的svn下,需要进行svn之间的切换,如果你在创建资源库位置的时候保存了用户名和密码,那么当您创建其它的资源库位置时,如果您没有该资源库位置的访问权限就会报文件夹不存在等错误,原因之一在于你保存了svn的用户名和密码,每次都使用这个用户名和密码登陆就会报错,下面介绍如何清除SVN的用户名和密码: 找到本地路径C:\Users\Administrator\AppData\

安装了iis之后,打开默认网站http://localhost/要求输入用户名和密码解决办法

开始-运行gpedit.msc回车.     计算机配置--管理模板-windows 组件-Internet Exporer-Internet控制面板-安全页-Internet区域:双击登陆选项:选择已启用:登陆选项-自动使用当前用户名和密码登陆,确定.     重启IE即可.

oracle登陆认证方式

转自:http://blog.itpub.net/14359/viewspace-683064/ 案例: 1,发现此时操作系统认证不成功: C:\Users\Administrator.WIN-20100719IOX>sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 12月 31 14:25:52 2010 Copyright (c) 1982, 2005, Oracle.  All rights reser

Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理

本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 PageHelper 进行分页显示.按照前面的博客,已经可以搭建一个简单的 Spring Boot 系统,本篇博客继续对此系统进行改造,主要集成了 Shiro 权限认证框架,关于 Shiro 部分,在本人之前的博客(认证与Shiro安全框架)有介绍到,这里就不做累赘的介绍. 此系列的博客为实践部分

登陆界面用户名,密码存储以及再次登陆自动填充用户名、密码

XML文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent&q

js判断登陆用户名及密码是否为空的简单实例

js判断登陆用户名及密码是否为空的简单实例 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <script type="text/javascript"> // 验证输入不为空的脚本代码 function checkForm(form) { if(form.username.value == "") { alert("用户名不能为空!"); form.username.focus(); return

java web 程序---javabean实例--登陆界面并显示用户名和密码

重点:注意大小写,不注意细节,这点小事,还需要请教 发现一个问题,也是老师当时写的时候,发现代码没错,但是就是运行问题. 大家看,那个java类,我们要求是所有属性均为私有变量,但是方法为公有的,如果方法为不公有的,那么运行就一定有问题,一定声明为public.不写修饰符,就是不对. 这样程序可以运行了,细节.这就是我觉得老师很棒的原因. 一个表单 deng.jsp ? 1 2 3 4 5 6 7 8 <body>   <form action="c.jsp">

登陆验证前对用户名和密码加密之后传输数据---base64加密

以下这种方法是加密传输的简单实现 1,base64.js /** * * Base64 encode / decode * * */ function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // public method for encoding this.encode = function (input