[英]change login to logout
我想在 ctx.session.userID 有值时将登录按钮更改为注销,我尝试使用 ejs 引擎,但它不起作用,是否有任何问题,或其他更好的方法。 这是 server.js:
const M = require('./model')
const Koa = require('koa')
var serve = require('koa-static')
const session = require('koa-session')
var KoaRouter = require('koa-router')
var koaLogger = require('koa-logger')
const koaBody = require('koa-body')
const views = require('koa-views')
var app = new Koa()
const router = new KoaRouter()
app.use(views('view', {map:{html:'ejs'}}))
app.use(koaLogger())
app.use(koaBody())
app.use(router.routes())
app.use(serve(__dirname + '/public'));
app.keys = ['*@&))9kdjafda;983']
const CONFIG = {
key: 'd**@&(_034k3q3&@^(!$!',
maxAge: 86400000
}
app.use(session(CONFIG, app))
router
.get('/', async (ctx) => {
let title = 'ejs test'
let userid = ctx.session.userID
await ctx.render('index',{
title, userid
})
})
.post('/login', login)
.get('/error', async (ctx)=> {
await ctx.render('error',{})
})
async function login(ctx){
let {id, password} = ctx.request.body
console.log("test:",id,password)
if ( await M.get(id,password) != null){
ctx.session.userID = id
ctx.redirect('/')
console.log('login success')
}
else {
ctx.redirect('/error')
}
}
这是 index.html 的一部分:
<% if (userid == null){ %>
<a href="/login">Login</a>
<% } else { %>
<a href="/logout">Logout</a>
<% } %>
在您的get('/')
路由函数中,您没有使用您在login()
函数中设置的相同会话变量。 更改get('/')
函数以let userid = ctx.session.userID
带有大写ID
并在发送到模板之前将其记录到控制台以确保变量确实设置正确。
我假设您在此应用程序中使用会话。 在 index.html 中,您可以使用以下 Ejs 代码检查状态是否已登录:
<li id="login"> <a href="<%= logStatus==='out'?'login':'logout'%>"> <%= logStatus==='out'?'LOGIN':'LOGOUT'%> </a> </li>
在此之后,您可以通过 Node.js 传递登录和注销状态,对于您在 Node.js 代码中使用的每个 res.render() 函数,请执行以下操作:
res.render("[your route name]", { logStatus:`${req.session.user? 'in':'out'}` });
例如:
app.get("/upload", checkSignIn, (req, res) => { res.render("upload", { logStatus:`${req.session.user? 'in':'out'}` }); });
注意:每次渲染时总是传递 logStatus 以避免错误,您不需要更改任何内容,它会自动检查会话状态并发送状态。
如果您有不同的会话名称,则在 req.session.[会话名称] 中更改它。 例如:如果我有一个像 autoTocken 这样的会话名称,那么它将类似于:
app.get("/upload", checkSignIn, (req, res) => { res.render("upload", { logStatus:`${req.session.autoTocken ? 'in':'out'}` }); });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.