将用户作为计算结果保存到会话 属性
Saving a user to a session as a computed property
我看到了有关此的其他问题(例如 this one),我相信这应该有效
import Ember from 'ember';
import Session from 'simple-auth/session';
export default {
name: 'session-with-me',
before: 'simple-auth',
initialize: function() {
Session.reopen({
me: function() {
if (this.get('isAuthenticated')) {
return this.container.lookup('service:store').find('me', { singleton: true });
}
}.property('isAuthenticated')
});
}
};
find('me', { singleton: true })
是 ember-jsonapi-resources 的工作补丁。在调试时,我可以看到正在发送请求,并且有效负载通过了。我在应用程序的其他地方使用相同的 find
调用,并且可以确认模型实例化正常。
在检查器上,在 container > simple-auth-session
下,我可以将 me
视为一个会话 属性,但它显示为 { _id: 68, _label: undefined ...}
设置会话的方式属性改变了吗?我可能在某处看到过关于此的提及,但我找不到了。
这与 another question I asked earlier 在同一个域中,但我放弃了这种方法并尝试简单地独立于身份验证过程获取用户。
这很可能是 ember-jsonapi-resources 的问题,而不是 Ember Simple Auth。
尽管您应该定义自己的会话来扩展 Ember Simple Auth 提供的默认会话,而不是重新打开会话 - 参见例如这个答案:How to store the user in a session
我们最终让它像这样工作:
// app/sessions/me.js
export default Session.extend({
me: function() {
var accessToken = this.get('secure.access_token');
if (!Ember.isEmpty(accessToken)) {
let self = this;
return this.container.lookup('service:me').find({}).then((me) => {
self.set('me', me);
});
}
}.property('secure.access_token')
});
// app/config/environment.js
ENV['simple-auth'] = {
session: 'session:me'
}
部分原因是资源服务在 EJR 中初始化的方式(所以@marcoow 对此的直觉是正确的),另一部分是我的编码错误。
有趣的是,我们不必在容器中显式注册会话
像这样设置自定义会话:
export default Session.extend({
me: function() {
var accessToken = this.get('secure.access_token');
if (!Ember.isEmpty(accessToken)) {
return DS.PromiseObject.create({
promise: this.container.lookup('service:me').find({});
});
}
}.property('secure.access_token')
});
// app/config/environment.js
ENV['simple-auth'] = {
session: 'session:me'
}
DS.PromiseObject
实际上是 Ember 您未使用的数据的一部分 - 我不知道您选择的库中是否有等效项。
我看到了有关此的其他问题(例如 this one),我相信这应该有效
import Ember from 'ember';
import Session from 'simple-auth/session';
export default {
name: 'session-with-me',
before: 'simple-auth',
initialize: function() {
Session.reopen({
me: function() {
if (this.get('isAuthenticated')) {
return this.container.lookup('service:store').find('me', { singleton: true });
}
}.property('isAuthenticated')
});
}
};
find('me', { singleton: true })
是 ember-jsonapi-resources 的工作补丁。在调试时,我可以看到正在发送请求,并且有效负载通过了。我在应用程序的其他地方使用相同的 find
调用,并且可以确认模型实例化正常。
在检查器上,在 container > simple-auth-session
下,我可以将 me
视为一个会话 属性,但它显示为 { _id: 68, _label: undefined ...}
设置会话的方式属性改变了吗?我可能在某处看到过关于此的提及,但我找不到了。
这与 another question I asked earlier 在同一个域中,但我放弃了这种方法并尝试简单地独立于身份验证过程获取用户。
这很可能是 ember-jsonapi-resources 的问题,而不是 Ember Simple Auth。
尽管您应该定义自己的会话来扩展 Ember Simple Auth 提供的默认会话,而不是重新打开会话 - 参见例如这个答案:How to store the user in a session
我们最终让它像这样工作:
// app/sessions/me.js
export default Session.extend({
me: function() {
var accessToken = this.get('secure.access_token');
if (!Ember.isEmpty(accessToken)) {
let self = this;
return this.container.lookup('service:me').find({}).then((me) => {
self.set('me', me);
});
}
}.property('secure.access_token')
});
// app/config/environment.js
ENV['simple-auth'] = {
session: 'session:me'
}
部分原因是资源服务在 EJR 中初始化的方式(所以@marcoow 对此的直觉是正确的),另一部分是我的编码错误。
有趣的是,我们不必在容器中显式注册会话
像这样设置自定义会话:
export default Session.extend({
me: function() {
var accessToken = this.get('secure.access_token');
if (!Ember.isEmpty(accessToken)) {
return DS.PromiseObject.create({
promise: this.container.lookup('service:me').find({});
});
}
}.property('secure.access_token')
});
// app/config/environment.js
ENV['simple-auth'] = {
session: 'session:me'
}
DS.PromiseObject
实际上是 Ember 您未使用的数据的一部分 - 我不知道您选择的库中是否有等效项。