Cra*_*sso 4 javascript firebase
我是新来的,所以请耐心等待.我正在尝试使用电子邮件和密码使用fire base简单登录.我有这个工作:
var authClient = new FirebaseAuthClient(fireRef, function(error, user) {
if (error) {
// an error occurred while attempting login
if(error.code === "INVALID_EMAIL"){
$('#log_email_error').hide();
$('#log_pass_error').hide();
$('#log_email_error').html("Invalid email specified.").fadeIn();
$('.login_button').removeClass('login_button_success').attr('value','Log in');
}
if (error.code === "INVALID_PASSWORD") {
$('#log_email_error').hide();
$('#log_pass_error').hide();
$('#log_pass_error').html("The specified password is incorrect..").fadeIn();
$('.login_button').removeClass('login_button_success').attr('value','Log in');
}
console.log(error);
} else if (user) {
// user authenticated with Firebase
hideLogin();
$('.userInfo_cont').show();
$('.userInfo').html('<div> '+ user.email + ' <span class="grey">| </span> </div>');
$('.logout').on('click',function(){
authClient.logout();
});
console.log('User ID: ' + user.id + ', Provider: ' + user.provider);
} else {
// user is logged out
$('.userInfo_cont').hide();
showLogin();
}
});
Run Code Online (Sandbox Code Playgroud)
但是当用户注册时我想在firebase/users区域存储一些额外的信息,我可以在注册时使用它:
$('#submit_reg').on('click',function(){
var firstName = $('#regFirstname').val();
var lastName = $('#regLastname').val();
var email = $('#regUsername').val();
var password = $('#regPassword').val();
authClient.createUser(email, password, function(error, user) {
if (!error) {
console.log('User Id: ' + user.id + ', Email: ' + user.email);
authClient.login('password', {
email: email,
password: password,
rememberMe: false
});
hideLogin();
userInfo = {
userId : user.id,
firstName : firstName,
lastName : lastName,
email : user.email
}
var url = USERS_LOCATION + "/" + user.id;
var userRef = new Firebase(url);
console.log(userInfo);
userRef.set(userInfo);
}else{
//display error
alert(error);
}
});
});
Run Code Online (Sandbox Code Playgroud)
我的问题是当我实现读写规则时,如文档所示:
{
"rules": {
"users":{
"$userid": {
".read": "auth.id == $userid",
".write": "auth.id == $userid"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当用户注册时,我获得了许可被拒绝.因此它注册用户就好了,但不会将其他数据写入/ users/id区域.
任何帮助将非常感激.
克雷格
在上面的代码片段中,您正在呼叫login(),然后立即呼叫set().这是有问题的,因为该login()方法是异步的,并且几乎总是保证set()在返回登录尝试方法之前调用方法,因为它login()是非阻塞的,但是对Firebase服务器进行网络调用.
这意味着即使您使用login()正确的电子邮件和密码进行呼叫,也会尝试在身份验证过程完成之前设置数据.
我建议将set()逻辑移动到一个块中,该块仅在您确定用户已经过身份验证时执行,例如在您调用new FirebaseAuthClient()和检测到登录用户时传递的回调中.
| 归档时间: |
|
| 查看次数: |
1606 次 |
| 最近记录: |