![](/img/trans.png)
[英]How to remain signed in with Firebase auth() when redirecting to another page?
[英]Firebase - Keep user signed in when redirecting to different page
我的網站有 2 個組件:
帶有注冊表單的登錄頁面 ( https://example.com )
單頁 anuglarjs 應用程序 ( https://app.example.com )
我想要實現的是,當用戶來到登陸頁面時,他們能夠使用 Firebase 進行注冊,一旦注冊完成,將用戶重定向到單頁應用程序並自動登錄,這樣他們就不會'不必再次輸入他們的信息。
這是我的登陸頁面注冊代碼:
處理注冊按鈕按下
$('.signUpBtn').click(function() {
let name = $('#firstName').val();
let email = $('#clientEmail').val();
let pw = $('#clientPw').val();
if (name != "" && email != "" && pw != "") {
if (pw.length > 7) {
firebase.auth().createUserWithEmailAndPassword(email, pw)
.then(function(user) {
ga('send', 'event', 'New account via landing page', 'created');
updateUser(name, email, true);
user.sendEmailVerification();
})
.catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
showError(errorMessage);
console.log(errorMessage);
// ...
});
} else {
showError("Oops. The password must be at least 8 characters...");
}
} else {
showError("Oops. The email, name, and password can not be empty...");
}
});
處理應該推送到用戶“個人資料”的信息:
function updateUser(name, email, clicked) {
firebase.auth().onAuthStateChanged(function(user) {
if (user && name != "" && email != "" && name != undefined && email != undefined) {
name = name.charAt(0).toUpperCase() + name.slice(1);
user.updateProfile({
displayName: name
}).then(function() {
firebase.database().ref('users/' + user.uid + '/user/').update({
name: name,
email: email,
first_signin: new Date(),
email_verified: false,
email_reminders: true,
pts: 0,
first_visit: true
}).then((snap) => {
console.log(snap)
window.location = 'https://app.example.com';
});
});
} else {
}
});
}
相當基本的 Firebase 東西......
這是我用於處理用戶身份驗證的app.example.com
單頁 angularjs 應用程序的代碼:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
//show their data
} else {
//show login component
}
});
再次,非常簡單的東西。
我遇到的問題是,當它重定向用戶時,並沒有讓他們登錄。它顯示了登錄組件,如果你輸入剛剛注冊的憑據,它完全可以工作,但我想要用戶在點擊頁面后立即登錄。
有什么我想念的嗎? 據我所知,它應該有效..
有任何想法嗎? 謝謝你。
Firebase Auth會話是單個主機來源。 它們通過localStorage / indexedDB持久化。 (他們確實提供會話並且也沒有持久性: https : //firebase.google.com/docs/auth/web/auth-state-persistence )
這就是為什么您無法在其他子域中訪問身份驗證狀態的原因。 您正在https://example.com上登錄,然后導航到https://app.example.com ,但是auth狀態僅在前者中保持不變。
我認為這是可能的:
firebase.auth().signInWithCustomToken(token)
.then((userCredential) => {
// Signed in
var user = userCredential.user;
// ...
})
.catch((error) => {
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
但是之前需要生成一個token。 我不是 Firebase 專家。 有人可以糾正我嗎?
來源: https : //firebase.google.com/docs/auth/admin/create-custom-tokens#web
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.