已认证时重定向失效排查 - Ember Simple Auth
routeIfAlreadyAuthenticated不生效的问题 我来帮你梳理下可能导致这个配置不生效的几个常见原因,一个个来排查:
登录路由没引入
UnauthenticatedRouteMixin
这是最容易踩的坑!routeIfAlreadyAuthenticated的自动重定向逻辑,是靠UnauthenticatedRouteMixin来触发的。你得确保auth.login路由继承了这个Mixin,不然Ember Simple Auth根本不知道要去检查登录状态。打开
app/routes/auth/login.js,确认代码是这样的:import Route from '@ember/routing/route'; import UnauthenticatedRouteMixin from 'ember-simple-auth/mixins/unauthenticated-route-mixin'; export default class AuthLoginRoute extends Route.extend(UnauthenticatedRouteMixin) { // 你的路由逻辑代码 }这个Mixin会在进入路由前检查session是否已认证,如果是的话就自动跳转到你配置的
rows路由。配置层级放错了位置
检查下config/environment.js里的配置结构,是不是把ember-simple-auth的配置直接放在ENV根对象下了?要是不小心嵌套到APP或者其他子对象里,Ember Simple Auth就读不到这个配置了。正确的结构应该是:module.exports = function(environment) { let ENV = { // 其他全局配置(比如APP、LOGGING之类的) 'ember-simple-auth': { authenticationRoute: 'auth.login', routeIfAlreadyAuthenticated: 'rows', routeAfterAuthentication: 'rows' } }; // 环境相关的配置 return ENV; };Session的认证状态未正确同步
登录成功后,打开Ember Inspector(浏览器开发者工具里的Ember标签),找到session服务,看看isAuthenticated属性是不是true。如果这个值是false,哪怕你觉得已经登录了,Ember Simple Auth也不会触发重定向。这种情况可能是你自定义了认证器或session store,没正确设置认证状态。路由名称写错了
确认下rows路由是不是真的存在,有没有拼写错误?比如是不是应该是row或者rows.index?如果路由名称不匹配,Ember找不到对应的路由,重定向就会失败,只会停留在当前登录页面。版本兼容性问题
如果你用的是比较旧的Ember Simple Auth版本,某些配置的行为可能和现在不一样。比如v3.x之后的版本,Mixin的使用方式或者配置项的名称有没有变化?可以核对下你项目里的版本(看package.json里的ember-simple-auth版本),确认配置项符合对应版本的要求。
内容的提问来源于stack exchange,提问作者Bitwise

