Firebase 使用SwiftUI和Firestore注册电子邮件、名字和姓氏
我想对用户进行身份验证,并使用用户名(第一个和最后一个)使用Firestore创建一个用户数据库。我可以创建用户,但无法同时创建数据库 这是我的SessionStore,用于注册和登录。通过注册,我想获取用户的名称并创建一个数据库。(下面没有代码,因为没有工作) 我是一个初学者,所以我希望能有一个详细的答案 非常感谢Firebase 使用SwiftUI和Firestore注册电子邮件、名字和姓氏,firebase,google-cloud-firestore,firebase-authentication,swiftui,Firebase,Google Cloud Firestore,Firebase Authentication,Swiftui,我想对用户进行身份验证,并使用用户名(第一个和最后一个)使用Firestore创建一个用户数据库。我可以创建用户,但无法同时创建数据库 这是我的SessionStore,用于注册和登录。通过注册,我想获取用户的名称并创建一个数据库。(下面没有代码,因为没有工作) 我是一个初学者,所以我希望能有一个详细的答案 非常感谢 import Firebase import Combine class SessionStore: ObservableObject { var didChange =
import Firebase
import Combine
class SessionStore: ObservableObject {
var didChange = PassthroughSubject<SessionStore, Never>()
@Published var session: User? {didSet {self.didChange.send(self) }}
var handle: AuthStateDidChangeListenerHandle?
func listen() {
handle = Auth.auth().addStateDidChangeListener({ (auth, user) in
if let user = user {
self.session = User(uid: user.uid, email: user.email)
} else {
self.session = nil
}
})
}
func signUp(email: String, password: String, handler: @escaping AuthDataResultCallback) {
Auth.auth().createUser(withEmail: email, password: password, completion: handler)
}
func signIn(email: String, password: String, handler: @escaping AuthDataResultCallback) {
Auth.auth().signIn(withEmail: email, password: password, completion: handler)
}
func signOut() {
do {
try Auth.auth().signOut()
self.session = nil
} catch {
print("Error signing out")
}
}
func unbind() {
if let handle = handle {
Auth.auth().removeStateDidChangeListener(handle)
}
}
deinit {
unbind()
}
}
struct User {
var uid: String
var email: String?
init(uid: String, email: String?) {
self.uid = uid
self.email = email
}
}
```
导入Firebase
进口联合收割机
类SessionStore:ObservableObject{
var didChange=PassthroughSubject()
@已发布的var会话:用户?{didSet{self.didChange.send(self)}
变量句柄:AuthStateDidChangeListenerHandle?
func listen(){
handle=Auth.Auth().addStateDidChangeListener({(Auth,user)在
如果let user=user{
self.session=User(uid:User.uid,email:User.email)
}否则{
self.session=nil
}
})
}
func注册(电子邮件:字符串,密码:字符串,处理程序:@escaping AuthDataResultCallback){
Auth.Auth().createUser(带电子邮件:电子邮件,密码:密码,完成:处理程序)
}
func-signIn(电子邮件:String,密码:String,处理程序:@escaping-AuthDataResultCallback){
Auth.Auth().sign(使用电子邮件:电子邮件,密码:密码,完成:处理程序)
}
func签出(){
做{
请尝试Auth.Auth().signOut()
self.session=nil
}抓住{
打印(“注销错误”)
}
}
func unbind(){
如果let handle=handle{
Auth.Auth().removeStateDidChangeListener(句柄)
}
}
脱硝{
解除绑定()
}
}
结构用户{
变量uid:String
var电子邮件:字符串?
初始化(uid:String,email:String?){
self.uid=uid
self.email=电子邮件
}
}
```
Firebase身份验证管理用户身份验证-虽然它确实存储了一些联合身份提供商提供的附加信息(如配置文件图片URL),但它并不打算成为配置文件管理解决方案。如果您想存储有关用户的其他信息,可以使用Cloud Firestore或Firebase实时数据库来实现
Firebase用户对象只有有限数量的属性,主要用于允许身份验证提供者对用户进行身份验证。对于Swift,定义如下:
-提供商标识符providerId
-提供商为用户提供的唯一IDuid
-用户的姓名(即他们的全名)displayName
-用户个人资料照片的URL(如果认证提供商支持!)photoURL
-用户的电子邮件地址电子邮件
-用户的电话号码,仅当用户通过电话号码认证时才可用phoneNumber
Auth.Auth().createUser(电子邮件:电子邮件,密码:密码)
GoogleService Info.plist
AppDelegate中调用FirebaseApp.configure()
//文件:ContentView.swift
导入快捷键
结构ContentView:View{
@State var firstName:String=“”
@状态变量lastName:String=“”
@State var city:String=“”
@State var email:String=“”
@状态变量密码:String=“”
@状态变量confirmPassword:String=“”
@状态变量showSignUpForm=true
@状态变量showDetails=false
@ObservedObject var sessionStore=sessionStore()
@状态变量配置文件:UserProfile?
var body:一些观点{
导航视图{
VStack{
如果self.showSignUpForm{
形式{
部分{
TextField(“名字”,text:$firstName)
.textContentType(.givenName)
TextField(“姓氏”,text:$lastName)
.textContentType(.familyName)
TextField(“城市”,文本:$City)
.textContentType(.addressCity)
}
部分{
文本字段(“电子邮件”,文本:$Email)
.textContentType(.emailAddress)
.自动资本化(.none)
SecureField(“密码”,文本:$Password)
SecureField(“确认密码”,文本:$confirmPassword)
}
按钮(操作:{self.signUp()}){
文本(“注册”)
}
}
.navigationBarTitle(“注册”)
}
否则{
形式{
文本字段(“电子邮件”,文本:$Email)
.textContentType(.emailAddress)
.自动资本化(.none)
SecureField(“密码”,文本:$Password)
按钮(操作:{self.signIn()}){
文本(“登录”)
}
}
.navigationBarTitle(“登录”)
}
按钮(操作:{self.showSignUpForm.toggle()}){
文本(self.showSignUpForm?“拥有帐户?改为登录。”:“还没有帐户?请单击此处改为注册。”)
}
}
.sheet(显示:$showDetails){
UserProfileView(userProfile:self.profile??userProfile(uid:,名字:,姓氏:,城市:))
}
}
}
func注册(){
sessionStore.signUp(电子邮件:self.email,密码:self.password,名字:self.fir