使用 Emberfire 登录后无法转换为当前用户
Trouble transitioning to current user after signing in with Emberfire
我正在使用 Emberfire 进行身份验证和数据库,我可以登录,但之后它不会将我重定向到我的当前用户页面。它还向我抛出一个错误,说自定义 url 中不存在用户,但我的 firebase 控制台显示用户具有我重定向到的正确 ID。
这是我的登录控制器:
import Ember from 'ember';
export default Ember.Route.extend({
beforeModel: function() {
return this.get('session').fetch().catch(function() {});
},
actions: {
signIn: function() {
var controller = this.get('controller');
var email = controller.get('email');
var password = controller.get('password');
this.get('session').open('firebase', { provider: 'password', 'email': email, 'password': password}).then(function(data) {
console.log(data.currentUser);
});
let uid = this.get('session').get('uid');
this.store.findRecord('user', uid).then(user => {
console.log(user.get('firstName'));
this.transitionTo('user', uid);
});
},
signOut: function() {
this.get('session').close();
}
}
});
这是我的路由器:
Router.map(function() {
this.route('signup');
this.route('home', { path: '/' });
this.route('login');
this.route('user', { path: '/user/:user_id' });
});
您必须等待身份验证完成。这就是 .then
的用途。在您当前的代码中,您在完成身份验证之前从 session
获取 uid
。
这应该有效:
import Ember from 'ember';
export default Ember.Route.extend({
beforeModel: function() {
return this.get('session').fetch().catch(function() {});
},
actions: {
signIn: function() {
var controller = this.get('controller');
var email = controller.get('email');
var password = controller.get('password');
var self = this;
this.get('session').open('firebase', { provider: 'password', 'email': email, 'password': password}).then(function(data) {
console.log(data.currentUser);
let uid = this.get('session').get('uid');
this.store.findRecord('user', uid).then(user => {
console.log(user.get('firstName'));
self.transitionTo('user', uid);
});
});
},
signOut: function() {
this.get('session').close();
}
}
});
我正在使用 Emberfire 进行身份验证和数据库,我可以登录,但之后它不会将我重定向到我的当前用户页面。它还向我抛出一个错误,说自定义 url 中不存在用户,但我的 firebase 控制台显示用户具有我重定向到的正确 ID。
这是我的登录控制器:
import Ember from 'ember';
export default Ember.Route.extend({
beforeModel: function() {
return this.get('session').fetch().catch(function() {});
},
actions: {
signIn: function() {
var controller = this.get('controller');
var email = controller.get('email');
var password = controller.get('password');
this.get('session').open('firebase', { provider: 'password', 'email': email, 'password': password}).then(function(data) {
console.log(data.currentUser);
});
let uid = this.get('session').get('uid');
this.store.findRecord('user', uid).then(user => {
console.log(user.get('firstName'));
this.transitionTo('user', uid);
});
},
signOut: function() {
this.get('session').close();
}
}
});
这是我的路由器:
Router.map(function() {
this.route('signup');
this.route('home', { path: '/' });
this.route('login');
this.route('user', { path: '/user/:user_id' });
});
您必须等待身份验证完成。这就是 .then
的用途。在您当前的代码中,您在完成身份验证之前从 session
获取 uid
。
这应该有效:
import Ember from 'ember';
export default Ember.Route.extend({
beforeModel: function() {
return this.get('session').fetch().catch(function() {});
},
actions: {
signIn: function() {
var controller = this.get('controller');
var email = controller.get('email');
var password = controller.get('password');
var self = this;
this.get('session').open('firebase', { provider: 'password', 'email': email, 'password': password}).then(function(data) {
console.log(data.currentUser);
let uid = this.get('session').get('uid');
this.store.findRecord('user', uid).then(user => {
console.log(user.get('firstName'));
self.transitionTo('user', uid);
});
});
},
signOut: function() {
this.get('session').close();
}
}
});