繁体   English   中英

将登录更改为注销

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM