- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我关注了 EmberFire guide设置与 torii 提供商的身份验证,它完美地工作。我希望在用户通过身份验证后将用户数据存储在 firebase 中,并在整个应用程序中访问用户对象。
我以前用 ember 做过这件事,但我不确定如何使用新的 torii 提供者来做。
我在想我应该测试用户是否已经在初始化函数中存储在 firebase 中,然后将用户注入(inject) Controller /路由。
任何指向我正确方向的帮助或一些示例代码都会有所帮助。
谢谢
最佳答案
您需要一个 Torii 适配器来实现 open
和 fetch
并对您的应用执行 find
/save
特定的用户模型。我们的 ToriiFirebaseAdapter 还没有这样做,。我已经为您敲定了一个可行的方法:
// app/torii-adapters/application.js
import Ember from 'ember';
export default Ember.Object.extend({
firebase: Ember.inject.service(),
store: Ember.inject.service(),
/**
* Executed after Firebase authentication.
*
* Find or create the user based on the Firebase `authData`
*
* @param {Object} authData
* @return {Promise<Object>} Updated session info
*/
open(authData) {
return this._findOrCreateUser(authData)
.then((user) => {
return { currentUser: user };
});
},
/**
* Fetch an existing Firebase auth session and place into `session.currentUser`
*
* @return {Promise<Object>} Updated session info
*/
fetch() {
let ref = this.get('firebase');
let authData = ref.getAuth();
if (!authData) {
return Ember.RSVP.Promise.reject(new Error('No Firebase session found'));
}
return this._findOrCreateUser(authData)
.then((user) => {
return { currentUser: user };
});
},
/**
* Teardown a session. Remove the `session.currentUser`.
*
* @return {Promise<Object>} Updated session info
*/
close() {
this.get('firebase').unauth();
return Ember.RSVP.Promise.resolve({ currentUser: null });
},
/**
* Find the user with the given `authData`, create if not found
*
* @param {Object} authData
* @return {Promise<Object>} The user
*/
_findOrCreateUser(authData) {
let store = this.get('store');
return store.find('user', authData.uid)
.catch(() => {
let newUser = store.createRecord('user', this.extractUserProperties(authData));
return newUser.save();
});
},
/**
* Extract the user properties from `authData` that you care about.
*
* @param {Object} authData
* @return {Object} An updated property hash
*/
extractUserProperties(authData) {
var name = 'Unknown';
var provider = authData.provider;
var userData = authData[provider];
if (userData.displayName) {
name = userData.displayName;
} else if (userData.username) {
name = userData.username;
}
return {
id: authData.uid,
name: name,
email: userData.email || null
};
}
});
您需要做的就是更新 extractUserProperties
方法,将您关心的属性放入用户模型中的正确位置 - 每个人都以不同的方式实现他们的用户模型。
现在您应该能够查找 session.currentUser
,它将返回与登录用户相对应的 Ember 数据模型。
希望对您有所帮助。我们正在将其添加到网站文档中,并将尝试找到一种方法将其纳入 EmberFire 提供的 ToriiFirebaseAdapter。
关于ember.js - EmberFire 身份验证和 ToriiFirebaseAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023653/
我目前正在按照本教程使用 Firebase 验证我的 EmberApp:Ember authentication with Firebase .我正在处理使用 Torii 插件进行身份验证的部分。 这
我关注了 EmberFire guide设置与 torii 提供商的身份验证,它完美地工作。我希望在用户通过身份验证后将用户数据存储在 firebase 中,并在整个应用程序中访问用户对象。 我以前用
问题 我似乎在使用 emberfire 时遇到以下错误,我按照文档进行操作但仍然收到错误: Uncaught TypeError: this._ref.push is not a function
我有两个 Ember 模型:一个 items和 comments .用户将发布一个项目,其他用户将能够对该项目发表评论。 我无法在 firebase 中设置允许 name 的安全规则和 descrip
我一直在关注这个tutorial在我的 Ember CLI + EmberFire + Firebase 应用程序上设置 Facebook 身份验证。 但是,当我单击登录按钮时,没有任何 react
我有一个由 {{#each}} 循环生成的表,它显示用户的名字和姓氏。我想添加一个删除按钮来删除该行上的记录。我还使用 EmberFire 连接 Firebase。 将该行中的数据与该删除按钮相关联的
我有一个带有时间戳属性的模型。在服务器上创建记录时,我希望此属性的值由服务器而不是客户端提供的值初始化,以便这些时间戳在不同客户端之间保持一致。 如果我直接使用 firebase API,那么我知道我
假设我有两个模型,Book 和 Chapter。 App.Book = DS.Model.extend name: DS.attr 'string' chapters: DS.hasMany
我正在尝试通过 Firebase 的电子邮件/密码提供商进行身份验证,但不断收到以下错误: Uncaught TypeError: Cannot read property 'open' of und
当我尝试通过简单地调用 this.store.find('article', { typeId: model.get('typeId') }) 加载文章时,我得到: Error while proce
我正在使用 EmberFire 将我的数据库与我的 Ember.js 应用程序连接起来。当我调用 destroyRecord() 时,我收到此错误: Uncaught TypeError: Canno
我正在使用 EmberFire 和 Torii 进行 session 。当我注销用户时遇到一个奇怪的问题,并且在控制台中抛出以下错误: firebase.js:186 Error: permissio
我是 emberjs 初学者,我一直在寻找如何将“firebase”和“emberfire”依赖项添加到我使用 ember-cli 创建的 ember 应用程序。我使用 bower 安装这两个依赖项,
我是一名优秀的程序员,十分优秀!