zoukankan      html  css  js  c++  java
  • nodejs运用passport和passport-local分离本地登录

      1 var express = require('express');
      2 var cookieParser = require('cookie-parser');
      3 var bodyParser = require('body-parser');
      4 var session = require('express-session');
      5 var swig = require('swig');
      6 var user = require('./modules/user');
      7 var app = express();
      8 
      9 
     10 
     11 //设置swig模板方法;
     12 app.engine('html', swig.renderFile);
     13 app.set('view engine', 'html');
     14 app.set('views', __dirname + '/views');
     15 
     16 //console.log(user)
     17 app.use(session({
     18   secret: 'hubwiz app', //secret的值建议使用随机字符串
     19   saveUninitialized: true,
     20   //此处的cookie设置需要注意;
     21   cookie: {
     22     secure: false
     23   } // 过期时间(毫秒)
     24 }));
     25 app.use(bodyParser.json());
     26 app.use(bodyParser.urlencoded({ extended: true }));
     27 app.use(cookieParser());
     28 
     29 
     30 //引入插件并配置;
     31 
     32 var passport = require('passport')
     33   , LocalStrategy = require('passport-local').Strategy;
     34 
     35 
     36 app.use(passport.initialize());
     37 app.use(passport.session());
     38 passport.use('local', new LocalStrategy(
     39   function (username, password, done) {
     40     var user = {
     41       id: '1',
     42       username: '123',
     43       password: '123'
     44     };
     45 
     46     if (username !== user.username) {
     47       return done(null, false, { message: 'Incorrect username.' });
     48     }
     49     if (password !== user.password) {
     50       return done(null, false, { message: 'Incorrect password.' });
     51     }
     52     //验证成功后,传入后面的流程;
     53     return done(null, user);
     54   }
     55 ));
     56 
     57 passport.serializeUser(function (user, done) {
     58   //此处设置session中保存用户的信息,这里保存ID;
     59   done(null, user.id);
     60 });
     61 
     62 passport.deserializeUser(function (user, done) {
     63   done(null, user);
     64 });
     65 
     66 app.get('/users',function(req,res){
     67   res.send("ok");
     68 });
     69 
     70 app.get('/',function(req,res){
     71   res.send("fail");
     72 });
     73 
     74 
     75 app.get('/login', function (req, res) {
     76   res.render('index', {title: 'index'});
     77 });
     78 
     79 
     80 //登录入口验证;前面配置的数据处理流,在这里传入验证函数里面;用户信息会保存在session里,并标记登录状态;
     81 app.post('/login', passport.authenticate('local', {
     82     successRedirect: '/users',
     83     failureRedirect: '/'
     84   }),function(req,res){
     85   console.log(req.body);
     86 });
     87 
     88 
     89 app.get('/logout', function (req, res) {
     90   req.logout();
     91   res.redirect('/');
     92 });
     93 
     94 //登录验证函数;通过此函数验证用户是否登录;
     95 function isLoggedIn(req, res, next) {
     96   if (req.isAuthenticated())
     97     return next();
     98   console.log(req.session);
     99   res.send("未登录");
    100 }
    101 
    102 
    103 app.get("/app",isLoggedIn,function(req,res){
    104   console.log(req.session);
    105   res.send("登录app");
    106 });
    107 
    108 
    109 app.listen(8080);

    相关资源

    Express结合Passport实现登陆认证

    坚持下去就能成功
  • 相关阅读:
    跨浏览器的事件处理程序(javascript高级程序设计第二版第十二章)
    json
    html5 本地存储Web Storage
    sicily 6497. 字符统计
    sicily 6415. linear correlation
    sicily 1154. Easy sort
    sicily 6496. 二维数组
    sicily 6423. 反向输出数字
    sicily 1636. show me the money
    sicily 1324. Score
  • 原文地址:https://www.cnblogs.com/suoking/p/5320595.html
Copyright © 2011-2022 走看看