Ember CLI + Ember Data + Simple Auth:授权不被调用

问题描述:

我正在使用Ember CLI + Ember Data + Simple Auth。验证者工作正常。但是当我使用Ember数据休息适配器this.store.findAll("user");进行休息呼叫时,我的自定义授权程序中的授权功能不会被调用。Ember CLI + Ember Data + Simple Auth:授权不被调用

Rest API端点位于其他域,因此我在我的environment.js中将url添加到了crossOriginWhitelist

environment.js:

module.exports = function(environment) { 
    var ENV = { 
     // some configuration 
    }; 

    ENV['simple-auth'] = { 
     crossOriginWhitelist: ['http://api.xxxx.com'], 
     authorizer: 'authorizer:xxxx', 
     routeAfterAuthentication: 'dashboard', 
    }; 

    return ENV; 
}; 

授权

import Ember from 'ember'; 
import Base from 'simple-auth/authorizers/base'; 

var XXXXAuthorizer = Base.extend({ 
    authorize: function(jqXHR, requestOptions) { 
     // Some Code, gets not called, damn it :(
    } 
}); 



export default { 
    name: 'authorization', 
    before: 'simple-auth', 
    initialize: function(container) { 
     container.register('authorizer:xxxx', XXXXAuthorizer); 
    } 
}; 

的index.html

.... 
     <script> 
      window.XXXXWebclientENV = {{ENV}}; 
      window.ENV = window.MyAppENV; 
      window.EmberENV = window.XXXXWebclientENV.EmberENV; 
     </script> 
     <script> 
      window.XXXXWebclient = require('xxxx-webclient/app')['default'].create(XXXXWebclientENV.APP); 
     </script> 
.... 

感谢您的帮助:)

我面临同样的问题。我有相同的设置,但授权功能没有被调用。也许你可以尝试在你的crossOriginWhiteList url中加入端口号。

我在新建初始化程序中添加了window.ENV = window.MyAppENV行,该初始化程序在simple-auth之前运行。你已经在索引文件中添加了这个功能,这可能就是simple-auth无法读取你的配置的原因。

其他配置routeAfterAuthentication: 'dashboard',是否正常工作?如果不是,那么这可能是原因。尝试添加新的初始化程序,如

export default { 
    name: 'simple-auth-config', 
    before: 'simple-auth', 

    initialize: function() { 
     window.ENV = window.MyAppNameENV; 
    }  
}; 
+0

我刚刚检查了相同的域,它工作正常。所以这肯定是一个跨域的域名问题。我认为simple-auth不能读取'crossOriginWhiteList'配置。 – 2014-09-05 12:28:47

+0

它开始为我工作。我以前定义的端口号也是错的。所以在我删除那个端口号后,它对我来说工作得很好。 – 2014-09-05 12:54:44

我有类似的问题。对我来说,这是crossOriginWhitelist配置。

我设置这样的:

// config/environment.js 

ENV['simple-auth'] = { 
    crossOriginWhitelist: ['*'] // <-- Make sure it's an array, not a string 
}; 

,看看我能得到它的工作(我可以),那么我可以缩小它弄清楚到底我应该用什么URL来强制限制(端口号和主机名等)。

不要这样,但!

你应该知道什么URL适用于白名单,并使用它。