Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 在模型挂钩之前使用ember simple auth进行身份验证_Ember.js_Ember Simple Auth - Fatal编程技术网

Ember.js 在模型挂钩之前使用ember simple auth进行身份验证

Ember.js 在模型挂钩之前使用ember simple auth进行身份验证,ember.js,ember-simple-auth,Ember.js,Ember Simple Auth,我创建了一个应用程序,它需要在所有页面上使用电子邮件/密码进行身份验证,只有一个页面(移动消息)需要使用刷新令牌进行身份验证。 我从JWT验证器扩展并覆盖了authenticate方法。所以它看起来像: authenticate (credentials, headers) { return new Ember.RSVP.Promise((resolve, reject) => { this.makeRequest('/auth/mobile_token', credentials,

我创建了一个应用程序,它需要在所有页面上使用电子邮件/密码进行身份验证,只有一个页面(移动消息)需要使用刷新令牌进行身份验证。 我从JWT验证器扩展并覆盖了authenticate方法。所以它看起来像:

authenticate (credentials, headers) {
return new Ember.RSVP.Promise((resolve, reject) => {
  this.makeRequest('/auth/mobile_token', credentials, headers)
    .then((response) => {
      Ember.run(() => {
        try {
          const sessionData = this.handleAuthResponse(response)
          resolve(sessionData)
        } catch (error) {
          reject(error)
        }
      })
    }, (xhr) => {
      Ember.run(() => { reject(xhr.responseJSON || xhr.responseText) })
    })
})
}

在mobile_消息路由上,我尝试在modelhook之前进行身份验证

beforeModel (transition) {
const authenticator = 'authenticator:api-token'
return this.get('session').authenticate(authenticator, {api_token: transition.queryParams.api_token}).then(() => {
  }, (reason) => {
  transition.abort()
  this.get('notifications').error('Permission denied.', {
    autoClear: true,
    clearDuration: 6200
  })
})
},

如果身份验证被拒绝,我需要停留在移动_消息路由上。但当我使用wront令牌进入路线时,我得到了下一个回程:

Preparing to transition from '' to 'mobileMessages'
index.js:169 generated -> controller:mobileMessages {fullName: 
"controller:mobileMessages"}
index.js:169 generated -> controller:aut`enter code here`henticated 
{fullName: "controller:authenticated"}
index.js:169 generated -> controller:loading {fullName: 
"controller:loading"}
router.js:300 Intermediate-transitioned into 'authenticated.loading'
index.js:169 generated -> route:messages-faxes {fullName: 
"route:messages-faxes"}
router.js:190 Transitioned into 'login'
jquery.js:9600 POST http://localhost:3000/auth/mobile_token 500 
(Internal Server Error)
看起来我在收到服务器的响应之前被重定向了。我找不到是谁把我从路线上引开了。我试图检查ApplicationRouteMixin,但只有在单击注销按钮时,我才得到sessionInvalidated方法调用。并在成功身份验证后进行会话身份验证

若我推送路由正确的令牌,那个么我首先重定向到登录页面,然后sessionAuthenticated激发。之后,我重定向到baseURL


解决重定向到登录页面问题的热点?

Ember Simple Auth使用mixin来确定在用户经过身份验证/未经身份验证时应该发生的路由转换行为

例如,如果用户未经身份验证,此mixin将不允许用户停留在路由上:

import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';

export default Ember.Route.extend(AuthenticatedRouteMixin, {
  // route code
});
您可能想要使用的是

此mixin用于仅当会话为 未经验证(例如,登录和注册路由)。它定义了一个 beforeModel方法,该方法中止当前转换,而 如果会话已验证,则转换到RouteFalReadyAuthenticated 认证的


在路由中包含未经验证的RouteMixin,如果会话未经验证,则需要访问该路由。例如:

// app/routes/login.js
import UnauthenticatedRouteMixin from 'ember-simple- 
auth/mixins/unauthenticated-route-mixin';

export default Ember.Route.extend(UnauthenticatedRouteMixin);

这是装料钩的一个错误。我在命名路由时出错。我创建了带有名称加载的路由,以重定向到消息传真路由。在这种情况下,在模型钩子返回之前,承诺余烬生成路由:应用程序加载。在应用程序加载路由中,我运行到消息传真路由的转换,该路由具有未经验证的路由emixin。这个mixin可以看到用户没有经过身份验证,并重定向到加载页面