2015-11-05 73 views
0

我是Node web應用程序中的新成員,目前正在進行簡單身份驗證。當我註冊或成功登錄用戶時,我將用戶保存到會話中,但是當我刷新頁面時,它實際上刷新了所有的角度模塊並會話更新。我無法弄清楚如何在節點中使用會話。我的代碼如下。如何在Nodejs應用程序中使用會話

//adding opensource modules to application 
var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var bcrypt = require('bcrypt-nodejs'); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var session = require('express-session'); 
var mongoose = require('mongoose'); 
var models_user = require('./Angular/Models/user.js'); 

//connection database 
mongoose.connect('mongodb://localhost/AngularizeApp'); 

//import the routers 
var router = require('./Routes/router'); 
var authenticate = require('./Routes/authentication')(passport); 

//for using express throughout this application 
var app = express(); 

//tell node that My application will use ejs engine for rendering, view engine setup 
app.set('views', path.join(__dirname, 'Views')); 
app.set('view engine', 'ejs'); 

//tell node the global configuration about parser,logger and passport 
app.use(logger('dev')); 
app.use(session({ 
    secret: 'keyboard cat' 
})); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(passport.initialize()); //initializing passport 
app.use(passport.session()); //initializing passport session 

//tell node about these directories that application may get resources from 
app.use('/', router); 
app.use('/auth', authenticate); 
app.use(express.static(path.join(__dirname, 'scripts'))); 
app.use(express.static(path.join(__dirname, 'Content'))); 
app.use(express.static(path.join(__dirname, 'Angular'))); 
app.use(express.static(path.join(__dirname, 'Views/Main'))); 
app.use(express.static(path.join(__dirname, 'Views/Authentication'))); 


//providing auth-api to passport so that it can use it. 
var initPassport = require('./Passport/passport-init'); 
initPassport(passport); 

//running server on node 
var server = app.listen(3000, function() { 
    var host = server.address().address; 
    var port = server.address().port; 
    console.log('Example app listening at http://%s:%s', host, port); 
}); 

//exporting this application as a module 
module.exports = app; 

這是我如何將用戶保存到應用程序模塊。

//Angular Starter App 
var main = angular.module("main", ['ui.router','ngRoute','ngResource']) 
.run(function($http,$rootScope) 
{ 
    //defining global veriables 
    $rootScope.roles = [{ 
      name: "Administrator", 
      code: 0 
     }, { 
      name: "Staff", 
      code: 1 
     }, { 
      name: "General", 
      code: 2 
    }];    
    //adding authentication global variables 
    if($rootScope.sess){ 
     $rootScope.authenticated = true; 
     $rootScope.current_user = $rootScope.sess.username; 
    } 
    else{ 
     $rootScope.sess = null; 
     $rootScope.authenticated = false; 
     $rootScope.current_user = 'Guest'; 
    } 

    $rootScope.signout = function(){ 
     $http.get('auth/signout'); 
     $rootScope.authenticated = false; 
     $rootScope.current_user = 'Guest'; 
    }; 
}); 

//Routing Configuration (define routes) 
main.config([ 
    '$stateProvider', '$urlRouterProvider', '$httpProvider', 
    function ($stateProvider, $urlRouterProvider,$rootScope) { 
     $urlRouterProvider.otherwise('/'); 
     $stateProvider 
      .state('home', { 
       url: '/', 
       templateUrl: 'Index.html', 
       caseInsensitiveMatch: true, 
       controller: 'MainController' 
      }) 
      .state('contact', { 
       url: '/contact', 
       templateUrl: 'Contact.html', 
       caseInsensitiveMatch: true, 
       controller: 'MainController' 
      }) 
      .state('about', { 
       url: '/about', 
       templateUrl: 'About.html', 
       caseInsensitiveMatch: true, 
       controller: 'MainController' 
      }) 
      .state('login',{ 
       url: '/login', 
       templateUrl: 'login.html', 
       caseInsensitiveMatch: true, 
       controller: 'AuthController' 
      }) 
      .state('register',{ 
       url: '/register', 
       templateUrl: 'register.html', 
       caseInsensitiveMatch: true, 
       controller: 'AuthController' 
      }) 
      .state('unauth',{ 
       url: '/unauth', 
       templateUrl: 'unauth.html', 
       caseInsensitiveMatch: true 
      }); 
    } 
]); 

我知道角模塊將刷新頁面刷新,這裏我救了我的會議我AuthController

$scope.login = function(){ 
    $http.post('/auth/login', $scope.user).success(function(data){ 
     if(data.state == 'success'){ 
      $rootScope.authenticated = true; 
      $rootScope.current_user = data.user.username; 
      $rootScope.sess = data.user; 
      console.log($rootScope.sess); 
      $location.path('/'); 
     } 
     else{ 
      $scope.error_message = data.message; 
      $rootScope.sess = null; 
     } 
    }); 
}; 

任何幫助將是非常讚賞。

回答

1

您可以使用sessionStorage。我在我的網絡應用程序中遇到了同樣的問題,這解決了我的問題。

if($rootScope.sess){ 
    $rootScope.authenticated = true; 
    sessionStorage.setItem('current_user', $rootScope.sess.username); 

}

希望這對你的作品。

0

您應該使用令牌並將其存儲在cookie中。你也必須在每個請求中提供這個cookie(也使用交叉)。之後,服務器應該接受並準備該令牌(按會話ID查找用戶),並且服務器應始終在響應頭中寫入令牌,直到令牌有效。你可以看看passport.js。

相關問題