如何解决为什么 Koa 的重定向会在另一个重定向之后抛出 404?
我有以下代码...
const auth = new Authentication();
mainApp.use(auth.checkToken.bind(auth));
mainApp.use(mount('/auth',auth.app));
class Authentication{
constructor() {
this.redirectApp = new Koa();
this.redirectApp.use(this.onLogin);
this.logoutApp = new Koa();
this.logoutApp.use(this.onLogout);
this.callbackApp = new Koa();
this.callbackApp.use(this.onCallback);
this.app = new Koa();
this.app.use(mount('/login',this.redirectApp));
this.app.use(mount('/callback',this.callbackApp));
this.app.use(mount('/logout',this.logoutApp));
}
checkToken(ctx,next){
if(ctx.path === "/auth/login" || ctx.path === "/auth/callback" || ctx.path === "/auth/logout"){
next();
} else{
const cookie = ctx.cookies.get("userInfo");
if(cookie == null){
ctx.redirect("/auth/login");
} else{
const userInfo = JSON.parse(ctx.cookies.get("userInfo"));
if(userInfo.accessToken){
// TODO: check the token;
next();
} else{
ctx.redirect("/auth/login");
}
}
}
}
onLogin(ctx){
const path = `https://${domain}/authorize?response_type=code&client_id=${clientId}&redirect_uri=${redirectUrl}&scope=email&audience=${audience}&state=`;
ctx.redirect(path);
}
}
当我转到根 (http://localhost:3000) 时,我可以看到它点击了 ctx.redirect(path);
,但我得到了 404。如果我注释掉 mainApp.use(auth.checkToken.bind(auth));
并点击 {{1}直接它工作正常。
为什么我不能在初始中间件后做重定向?
解决方法
通过等待下一个修复它...
async checkToken(ctx,next){
if(ctx.path === "/auth/login" || ctx.path === "/auth/callback" || ctx.path === "/auth/logout"){
await next();
} else{
const cookie = ctx.cookies.get("userInfo");
if(cookie == null){
ctx.redirect("/auth/login");
} else{
const userInfo = JSON.parse(ctx.cookies.get("userInfo"));
if(userInfo.accessToken){
// TODO: check the token;
await next();
} else{
ctx.redirect("/auth/login");
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。