Firebase 사용자 테이블에 추가 세부 정보 추가
저는 파이어베이스+angularjs 앱을 하고 있으며 간단한 이메일과 비밀번호 인증을 사용하고 있으며 정상적으로 작동하고 있습니다.
파이어베이스에 추가 노드/테이블을 생성하지 않고 사용자에 대한 청구 정보 및 기타 세부 정보를 추가하는 것처럼 파이어베이스 이메일+패스워드 인증에서 사용 중인 사용자 테이블에 추가 사용자 데이터를 추가할 수 있는지 궁금합니다.
Firebase는 사용자가 직접 액세스할 수 없는 별도의 위치에 전자 메일/암호 사용자를 저장합니다.이 위치에서는 데이터를 확장할 수 없습니다.
개발자가 응용 코드의 에 모든 ▁a▁all▁since▁users▁to에 저장하는 것이 일반적인 관행입니다./users
응용프로그램 데이터베이스 내부의 노드입니다.단점은 이것을 직접 해야 한다는 것입니다.하지만 이것의 긍정적인 측면은 당신이 원한다면 추가적인 정보를 저장할 수 있다는 것입니다.
샘플 코드에 대한 사용자 데이터 저장에 대한 Firebase 가이드를 참조하십시오.여기서부터:
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.onAuth(function(authData) {
if (authData && isNewUser) {
// save the user's profile into Firebase so we can list users,
// use them in Security and Firebase Rules, and show profiles
ref.child("users").child(authData.uid).set({
provider: authData.provider,
name: getName(authData)
});
}
});
참고: 이 방법은 Firebase Admin SDK를 사용하고 있으며 사용자 지정 토큰을 관리하기 위해 서버에 끝점이 있어야 하는 경우에만 사용할 수 있습니다.
Firebase Admin SDK에는 임의 데이터를 포함할 수 있는 추가 클레임 개체로 사용자 지정 토큰을 생성하는 옵션이 있습니다.이는 사용자가 프리미엄 사용자인지 여부와 같은 사용자 관련 정보를 저장하는 데 유용할 수 있습니다.
는 다을사추청데액수있다습니를 사용하여 수 있습니다.auth
물건.
예
var uid = "some-uid"; //this can be existing user UID
var additionalClaims = {
premiumAccount: true,
some-user-property: 'some-value'
};
admin.auth().createCustomToken(uid, additionalClaims)
.then(function(customToken) {
// Send token back to client
})
.catch(function(error) {
console.log("Error creating custom token:", error);
});
additionalClaims
Firebase 보안 규칙에서도 액세스할 수 있습니다.
자세한 내용은 Firebase 사용자 지정 토큰을 참조하십시오.
Firebase 사용자는 프로젝트의 사용자 데이터베이스에 저장된 고정된 일련의 기본 속성(유일한 ID, 기본 전자 메일 주소, 이름 및 사진 URL)을 가지고 있으며, 이 속성은 사용자(iOS, Android, 웹)가 업데이트할 수 있습니다.Firebase 사용자 개체에 다른 속성을 직접 추가할 수 없습니다. 대신 추가 속성을 Firebase 실시간 데이터베이스에 저장할 수 있습니다.
Firebase에는 업데이트할 수 있지만 추가할 수 없는 고정된 사용자 속성 집합이 있습니다.
그러나 직렬화 및 역직렬화를 사용하여 소량의 데이터를 추가할 수 있습니다.JSON.stringify() and JSON.parse()
그런 다음 사용되지 않는 속성 중 하나를 사용하여 문자열을 저장합니다.
DisplayName 또는 photoURL 속성에 있습니다.추가할 수 있는 데이터는 크기가 작고 문자열로 저장되어야 합니다.
그리고 이것은 아래 그림과 같이 각화가 아닌 FIREBASE SDK의 방법을 사용해야만 가능합니다.
var user = firebase.auth().currentUser;
user.updateProfile({
displayName: "Jane Q. User",
photoURL: "https://example.com/jane-q-user/profile.jpg"
}).then(function() {
// Update successful.
}, function(error) {
// An error happened.
});
사진 URL이나 디스플레이에 더 많은 json 데이터를 저장할 수 있습니다.문자열 형식의 YName 변수입니다.
제 답변은 각도와 관련이 없지만 폴리머와 폴리머파이어를 사용하여 어떻게 하는지 알아보기 위해 조용히 검색하여 사람들이 저보다 더 빨리 끝낼 수 있도록 이 답변을 추가합니다.
Frank van Puffelen이 언급했듯이 저는 db에 별도의 노드를 추가해야 했습니다.
가져오기:
<link rel="import" href="../bower_components/polymerfire/firebase-app.html">
<link rel="import" href="../bower_components/polymerfire/firebase-auth.html">
<link rel="import" href="../bower_components/polymerfire/firebase-document.html">
그런 다음 앱의 아무 곳에나 배치합니다.<firebase-app>
구성 요소:
<firebase-app
name="yourAppName"
api-key= "{{yourApi}}"
auth-domain= "{{yourAuthDomain}}"
database-url= "{{yourDbUrl}}"
>
</firebase-app>
그런 다음 사용해야 합니다.<firebase-auth>
그리고 <firebase-document>
:
템플릿:
<firebase-auth
id="auth"
app-name="yourAppName"
signed-in="{{signedIn}}"
user="{{user}}">
</firebase-auth>
<firebase-document
id="document"
app-name="yourAppName"
path="{{usersPath}}" // e.g "/users"
data="{{userDocument}}">
</firebase-document>
스크립트:
this._register = function(){
var formValid = this.querySelector('#register-form').validate();
var auth = this.querySelector('#auth');
if(formValid && this.passWordsIdentic){
//The actual registration
auth.createUserWithEmailAndPassword(this.email, this.password).then(function(user){
console.log('auth user registration succes');
//Example values
this.userDocument.uid = user.uid;
this.userDocument.email = user.email;
this.userDocument.firstName = this.firstName;
this.userDocument.lastName = this.lastName;
this.userDocument.userName = this.userName;
this.$.document.save(this.usersPath).then(() => {
console.log("custom user registration succes");
this.$.document.reset();
});
}.bind(this)).catch(function(error) {
var errorCode = error.code;
var errorMessage = error.message;
console.log('error: ', errorCode);
);
}
}
이상으로, 여러분은 이 훌륭한 구글 코드랩을 보고 싶을 것입니다. 이것은 폴리머와 함께 파이어베이스를 사용하는 좋은 방법입니다.
다음은 사용자 테이블에 추가 필드를 추가하는 등록 코드입니다.
import { AngularFireAuth } from "@angular/fire/auth";
constructor(private firebaseAuth: AngularFireAuth){}
registration(data: any, password: any) {
return this.firebaseAuth.auth.createUserWithEmailAndPassword(data.Email, password)
.then(res => {
res.user.updateProfile({
displayName: `${data.DisplayName}`
})
data.UserId = res.user.uid;
data.PhoneNumbers = [{
NumberType: '',
NumberValue: ''
}];
data.PhotoUrl = '';
data.Addresses = [{
AddressLine1: '',
AddressLine2: '',
City: '',
State: '',
Country: '',
PostalCode: '',
AddressType: ''
}];
data.IsDeleted = false;
this.fireStore.doc(`users/${res.user.uid}`).set(data);
this.toastr.success('User has been register successfully!', 'Successfull!');
return true;
}).catch(err => {
switch (err.code) {
case 'auth/email-already-in-use':
this.toastr.error(`Email address ${data.Email} already in use.`, 'Error!');
break;
case 'auth/invalid-email':
this.toastr.error(`Email address ${data.Email} is invalid.`, 'Error!');
break;
case 'auth/operation-not-allowed':
this.toastr.error('Error during sign up.', 'Error!');
break;
case 'auth/weak-password':
this.toastr.error('Password is not strong enough. Add additional characters including special characters and numbers.', 'Error!');
break;
default:
this.toastr.error(err.message, 'Error!');
break;
}
});
}
여기 빠른 버전이 있습니다.사용자 구조("테이블")는 다음과 같습니다.
--users:
-------abc,d@email,com:
---------------email:abc.d@email.com
---------------name: userName
etc.
인증을 통과한 후FIRAuth.auth()?.createUser
데이터베이스의 사용자를 다음과 같이 설정할 수 있습니다.
let ref = FIRDatabase.database().reference()
let rootChild = ref.child("users")
let changedEmailChild = u.email?.lowercased().replacingOccurrences(of: ".", with: ",", options: .literal, range: nil) // Email doesn't support "," firebase doesn't support "."
let userChild = rootChild.child(changedEmailChild!)
userChild.child("email").setValue(u.email)
userChild.child("name").setValue(signup.name)
v4.0.0에서는 메서드가 변경되었습니다.따라서 사용자 프로필을 검색하려면 다음 코드를 사용해야 합니다.
afAuth.authState.subscribe((user: firebase.User) => {
this.displayName = user.displayName;
this.email = user.email;
this.photoURL = user.photoURL;
});
프랭크의 대답은 좋지만 Angular6/Firebase5/Angularfire5에서는 상황이 조금 다릅니다.
다음은 사용자 로그인을 위한 클릭 핸들러입니다.
this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider()).then((e) => {
console.log("Log-In Success" + e.additionalUserInfo.profile.name);
if (e.additionalUserInfo.isNewUser)
this.addUserToDatabase(/*...*/);
}).catch((error) => {
console.log("Log-In Error: Google Sign-In failed");
});
언급URL : https://stackoverflow.com/questions/31038611/add-extra-details-on-firebase-user-table
'programing' 카테고리의 다른 글
py.test 테스트를 실행하도록 PyCharm을 구성하려면 어떻게 해야 합니까? (0) | 2023.06.05 |
---|---|
Ruby로부터 Python 배우기; 차이점과 유사점 (0) | 2023.06.05 |
요소가 활성화되었을 때 indexpath.row를 가져오는 방법은 무엇입니까? (0) | 2023.05.31 |
CSS에서 다중 변환을 적용하는 방법은 무엇입니까? (0) | 2023.05.31 |
Capybara 2.0으로 업그레이드한 후 항목 목록에서 첫 번째 링크를 클릭하는 방법은 무엇입니까? (0) | 2023.05.31 |