在我的Rails应用程序中,我正在尝试设置一个cookie,以便在页面加载后由Ember Simple Auth的cookie存储库获取。我正在使用Ember Simple Auth OAuth2授权程序。
现在,我只是直接将OAuth数据植入为cookie值:
{
"token_type": "bearer",
"access_token": "3ec78864cc017982fdeeb0c092bfbea3f104df1e18c9c67f222581d9353f3fce",
"refresh_token": "cb03c07b8845ea7b40251b0df46839177bd7b51b3dd1d23f167890b9e1549f07",
"created_at": 1436454055,
"expires_in": 7060,
"expires_at": 1436461254
}
我猜这不是Ember Simple Auth所期望的,因为syncData
函数读取它一次,然后在下一次cookie轮询后用该值替换它:
{ secure: {} }
OAuth 2的数据应该是什么样的?无论它是如何存储的,我都猜测它是相同的(cookie与本地存储与短暂存储)。
从[{3}}查看this screenshot之后,我觉得我可能已经离开了,而且我一直无法理解在Ember Simple Auth来源中找到的地方弄清楚这一点。
答案 0 :(得分:1)
Ember Simple Auth仅使用cookie来存储其内部状态。 cookie不能从服务器设置,也不应在服务器端使用。该库仅用于为无状态(=无cookie)API实现令牌认证。
有关OAuth 2.0如何与ESA协同工作的更多信息,请参阅自述文件:https://github.com/simplabs/ember-simple-auth/tree/master/packages/ember-simple-auth-oauth2#ember-simple-auth-oauth-20
答案 1 :(得分:0)
我认为,如果可能的话,应该遵循马可在接受的答案中提出的建议。
但是,稍微多了一点,我发现cookie内容需要看起来像这样才能让Ember Simple Auth OAuth 2识别它:
{
"secure": {
"authenticator": "simple-auth-authenticator:oauth2-password-grant",
"token_type": "bearer",
"access_token": "3ec78864cc017982fdeeb0c092bfbea3f104df1e18c9c67f222581d9353f3fce",
"refresh_token": "cb03c07b8845ea7b40251b0df46839177bd7b51b3dd1d23f167890b9e1549f07",
"created_at": 1436454055,
"expires_in": 7060,
"expires_at": 1436461254
}
}
当然,这种方法存在一些缺点,即如果改变Ember Simple Auth存储数据的格式,升级Ember Simple Auth可能会中断。
如果你从我试图做的其他应用程序设置cookie,你需要注意在每次更新Ember Simple Auth后检查这种格式。实现此目的的最佳方法是创建一个安装并配置了Simple Auth的空白Ember应用程序,然后在您登录应用程序后查看它存储的数据格式。