Closed chenchi2038 closed 6 years ago
我是创建了一个 base logic 然后再 __before
中判断了登录权限,所有要判断登录权限的的logic都继承这个 base,然后对应接口就会做登录校验。然后前端根据返回的错误跳转到登录页。可以参考下下面的项目代码:
https://github.com/thinkjs/pharos/blob/master/src/logic/api/base.js#L2-L8
这个是应用内的登录状态判断,和我的需要稍微有点差别。 目前在做的应用,所有的数据操作都是通过service调用接口来完成,如果后台接口返回401未登录,就需要redirect或者直接返回login.html,刚开始接触thinkjs,不太懂怎么实现。 @lizheming
你这种只需要包一个公共的方法去处理底层服务的数据,内部统一判断下状态并抛401 的错误就好了。你调用 service 的地方不确定所以是没办法在 ThinkJS 的某一个环节统一做处理的。
是的 ,把所有远程api接口调用都封装到一个公共方法里,然后统一判断响应内容。 我找到办法了:
{
handle : 'trace',
enable : !think.isCli,
options: {
debug : !isDev,
error(err, ctx){
if (err.status === 401) {
ctx.redirect('/login');
return false;
}
},
}
},
通过ctx.redirect来重定向到/login,返回false中断后续处理流程。 @lizheming 谢谢关注。
DESC
在service中通过axios库来调用远程的api接口,如果接口返回401未授权的错误状态,这时候需要返回login.html给用户,提示用户登录。 目前是直接在service中抛出{status:401},然后配置trace中间件中401错误对应的模板:
trace插件是直接输出了页面的文本内容,并没有通过模板引擎(nunjucks)来输出,请问如何通过模板引擎来输出这个登录页面呢? 或者换个位置,在trace插件的error回调函数中,可以拿到ctx对象,这里直接设置ctx.body,同样的问题,如果通过模板引擎来render登录页呢。
ENV
OS Platform:
Node.js Version:
ThinkJS Version:
code
error message
more description
// your detail description