gpt4 book ai didi

session - 刷新后 Torii session 不会持续存在

转载 作者:行者123 更新时间:2023-12-02 06:02:26 25 4
gpt4 key购买 nike

目前,我的 Ember-cli 应用程序在刷新后注销。我已经修改了很多代码以尝试使其正常工作,但没有任何帮助。如有必要,我将尝试使用其他提供商实现身份验证。

我有一个应用程序路由,它只是注销和登录路由,它处理登录,因为客户端想要对其进行样式设置。

我的 config/environment.js 文件如下所示:

firebase: 'https://<my-website-here>.firebaseio.com/',
torii: {
sessionServiceName: 'session'
},

应用程序/适配器/application.js:
import Ember from 'ember';
import FirebaseAdapter from 'emberfire/adapters/firebase';

const { inject } = Ember;

export default FirebaseAdapter.extend({
firebase: inject.service(),
});

应用程序/鸟居适配器/application.js:
import Ember from 'ember';
import ToriiFirebaseAdapter from 'emberfire/torii-adapters/firebase';

export default ToriiFirebaseAdapter.extend({
firebase: Ember.inject.service()
});

应用程序/路由/application.js:
import Ember from 'ember';

export default Ember.Route.extend({
actions: {
logout: function() {
this.get('session').close().then(function() {
this.transitionTo('application');
}.bind(this));
}
}
});

应用程序/路由/login.js:
import Ember from 'ember';

export default Ember.Route.extend({
actions: {
login: function() {
var controller = this.get('controller');
var email = controller.get('userEmail');
var password = controller.get('userPassword');
this.get('session').open('firebase', {
provider: 'password',
email: email,
password: password
}).then(function() {
this.transitionTo('dashboard');
}.bind(this));
}
}
});

是的,目前,登录和注销工作得很好,但我无法在 session 中间刷新页面,否则它会自动注销我。

提前感谢任何人。

最佳答案

Torii 不会为您保留身份验证 session 。您需要在 open 中自己实现此功能, fetch , 和 close适配器的 Hook 。

最简单的方法是使用 the localStorage API .

拿来

fetch Hook ,您需要将 session 数据从 localStorage 中提取出来。如果那里什么都没有,要么抛出异常,要么返回一个 promise reject .

打开

您的适配器需要 resolve session 数据,但也应将其存储在 localStorage 以供以后的 session 使用。

关闭

清除 session 数据的 localStorage 键并返回一个 promise resolve .

例子

Here's the application adapter from one of my applications ,它将 Slack API 与 Torii 一起使用。 open hook 可能与您对 Firebase 所需的不同,但希望这可以为您提供一些工作。

export default Ember.Object.extend({
storage: Ember.inject.service(),

fetch() {
let token = this.get('storage.token');

if (Ember.isEmpty(token)) {
throw new Error('No token in storage');
}

return Ember.RSVP.resolve({ token });
},

open(authentication) {
return new Ember.RSVP.Promise((resolve, reject) => {
Ember.$.ajax({
type: 'POST',
url: '/api/tokens',
data: authentication,
dataType: 'json',
success: Ember.run.bind(null, resolve),
failure: Ember.run.bind(null, reject)
});
}).then(data => {
let token = data.accessToken;

this.set('storage.token', token);

return { token };
});
},

close() {
this.set('storage.token', null);

return Ember.RSVP.resolve();
}
});

My storage service is a wrapper around the browser localStorage API .

关于session - 刷新后 Torii session 不会持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35516992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com