Nodejs用户登录,退出案例
生活随笔
收集整理的這篇文章主要介紹了
Nodejs用户登录,退出案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- supervisor / nodemon每次修改代碼后,都會重寫啟動
npm install -- save-dev supervisor
npm install --save-dev nodemon
Node中Session的使用
-
為什么使用session
session運行在服務器端,當客戶端第一次訪問服務器時,可以將客戶的登陸信息保存。當客戶訪問其他界面時,可以判斷客戶的登陸狀態,做出提示。可以保存一些客戶的常用信息,當客戶端再次獲取常用信息時,不必再從數據庫中進行查詢。session可以與redis或數據庫等結合做持久化操作,當服務器掛掉時也不會導致某些客戶信息(購物車)消失。 -
session的工作流程
當瀏覽器訪問服務器并發送第一次請求時,服務器端會創建一個session對象,生成一個類似于key,value的鍵值對,然后將key(cookie)返回到瀏覽器(客戶)端,瀏覽器下次再訪問時,攜帶key(cookie),找到對應的session(value)。客戶的信息都保存在session中。 -
nodejs中采用express-session使用session
//app.js配置session //secret:一個String類型的字符串,作為服務器端生成session的簽名。 //resave:(是否允許)當客戶端并行發送多個請求時,其中一個請求在另一個請求結束時對session進行修改覆蓋并保存。默認為true。但是(后續版本)有可能默認失效,所以最好手動添加。 //saveUninitialized:初始化session時是否保存到存儲。默認為true, 但是(后續版本)有可能默認失效,所以最好手動添加。cookie:設置返回到前端key的屬性,默認值為{ path: '/', httpOnly: true, secure: false, maxAge: null }app = express(); var session = require('express-session'); app.use(session({secret: 'keyboard cat',resave: false,saveUninitialized: true,cookie: { secure: false } })); express-session的一些方法: Session.destroy():刪除session,當檢測到客戶端關閉時調用。 Session.reload():當session有修改時,刷新session。 Session.regenerate():將已有session初始化。 Session.save():保存session。 // 訪問login路由時需要先在req的session中保持用戶的信息 router.get('/login', function(req, res, next) {var user={name:"david",age:"22"}req.session.user=user;res.render('index', {title: 'the test for nodejs session' ,}); });// 登錄時需要判斷改用戶是否登錄 router.get('/', function(req, res, next) {if(req.session.user){var user=req.session.user;var name=user.name;res.send('你好'+name+',歡迎登錄。');}else{res.send('你還沒有登錄,先登錄下再試試!');} });
npm install --save express-session
頁面提示
- 在user.js中添加錯誤提示router.post('/login', function (req, res, next) {const user = {username: 'admin',password: 'admin'};if (req.body.username === user.username &&req.body.password === user.password) {req.session.user = user;res.redirect('/users/home');}//添加錯誤提示req.session.error = '用戶名或密碼不正確';res.redirect('/users/login'); });
- 在app.js中添加app.use(function (req, res, next) {res.locals.user = req.session.user;const err = req.session.error;req.session.error = null;res.locals.message = '';if (err) res.locals.message = '<div class = "alert alert-error">' + err + '</div>';next(); });
- 修改user.jsrouter.get('/login', function (req, res, next) {res.render('login', { title: '用戶登錄', message: res.locals.message }); });
- 修改login.ejs<% include header.ejs %><div class="container-fluid"><form class="form-horizontal" method="post"><fieldset><legend>用戶登陸</legend><!-- 添加這句,不能是<%= message %>要不就把html語句直接輸出了 --><%- message %><div class="control-group"><label class="control-label" for="username">用戶名</label><div class="controls"><input type="text" class="input-xlarge" id="username" name="username"></div></div><div class="control-group"><label class="control-label" for="password">密碼</label><div class="controls"><input type="password" class="input-xlarge" id="password" name="password"></div></div><div class="form-actions"><button type="submit" class="btn btn-primary">登陸</button></div></fieldset></form></div><% include footer.ejs %>
頁面訪問控制
- 頁面訪問控制//頁面訪問控制//如果允許訪問用戶登陸頁面,用戶是沒有登錄的 router.get('/login', notAuthentication)//如果允許訪問用戶登出鏈接,用戶是登錄上去的 router.get('/logout', authentication)//如果允許訪問用戶主頁,用戶是已經登錄的 router.get('/home', authentication)//如果用戶已經登錄,返回真 function authentication(req, res, next) {if (!req.session.user) {req.session.error = '請先登錄';return res.redirect('/users/login');}next(); }//如果用戶沒有登錄,返回真 function notAuthentication(req, res, next) {if (req.session.user) {req.session.error = '已登陸';return res.redirect('/users');}next(); }
GitHub地址
總結
以上是生活随笔為你收集整理的Nodejs用户登录,退出案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Build file: no targe
- 下一篇: Day6 - 头像存储与EasyExce