一、屬性
BmobUser除了從BmobObject繼承的屬性外,還有幾個特定的屬性:
- username: 使用者的使用者名稱(必需)。
- password: 使用者的密碼(必需)。
- email: 使用者的電子郵件地址(可選)。
BmobUser自動處理使用者賬戶管理所需的功能。
-(void)setUsername:(NSString *)username;//使用者名稱,必需
-(void)setPassword:(NSString*)password;//密碼,必需
-(void)setEmail:(NSString *)email;//設定郵箱
-(void)setObject:(id)obj forKey:(id)key;//設定某個屬性的值
-(id)objectForKey:(id)key;//得到某個屬性的值
複製程式碼
二、註冊
應用很常見的一個功能就是,註冊使用者,使用BmobUser註冊使用者也不復雜,如下的例子所示:
BmobUser *bUser = [[BmobUser alloc] init];
[bUser setUsername:self.nameTextField.text];
[bUser setPassword:self.passwordTextField.text];
[bUser signUpInBackgroundWithBlock:^ (BOOL isSuccessful, NSError *error){
if (isSuccessful){
NSLog(@"Sign up successfully");
NSString *result = [NSString stringWithFormat:@"註冊成功\n使用者名稱:%@\n密碼:%@\n去試試登入吧",self.nameTextField.text,self.passwordTextField.text];
[self showResultInfo:result];
} else {
NSLog(@"%@",error);
[self showResultInfo:@"註冊失敗,檢視控制檯資訊"];
}
}];
複製程式碼
注意點:
-
有些時候你可能需要在使用者註冊時傳送一封郵件,以確認使用者郵箱的真實性。這時,你只需要登入自己的應用管理後臺,在應用設定->郵件設定(下圖)中把“郵箱驗證”功能開啟,Bmob雲後端就會在使用者註冊時自動發動一封驗證給使用者。
-
username欄位是大小寫敏感的欄位,如果你希望應用的使用者名稱不區分大小寫,請在註冊和登入時進行大小寫的統一轉換。
三、登入
當使用者註冊成功後,需要讓他們以後能夠登入到他們的賬戶使用應用。要做到這點可以使用
方法一
[BmobUser loginWithUsernameInBackground:self.nameTextField.text password:self.passwordTextField.text];
複製程式碼
方法二
[BmobUser loginWithUsernameInBackground:self.nameTextField.text password:self.passwordTextField.text block:^(BmobUser *user, NSError *error) {
if (user) {
NSString *result = [NSString stringWithFormat:@"登入成功\n使用者名稱:%@\n密碼:%@\n去試試獲取當前使用者吧",user.username,user.password];
[self showResultInfo:result];
}else{
NSLog(@"%@",error);
[self showResultInfo:@"登入失敗,檢視可控制檯訊息"];
}
}];
複製程式碼
可以看到Bmob裡面提供了很多的方法,根據需要呼叫
四、獲取當前使用者
每次你登入成功,都會在本地磁碟中有一個快取的使用者物件作為當前使用者,可以獲取這個快取的使用者物件來進行登入:
BmobUser *user = [BmobUser currentUser];
if (user) {
//進行操作
NSString *result = [NSString stringWithFormat:@"登入成功\n使用者名稱:%@\n密碼:%@\n去試試更新使用者吧",user.username,user.password];
[self showResultInfo:result];
}else{
//物件為空時,可開啟使用者註冊介面
[self showResultInfo:@"當前沒有使用者"];
}
複製程式碼
當然,你也可以用如下的方法清除快取使用者物件:
[BmobUser logout];
複製程式碼
五、更新使用者
當使用者登入成功後,在本地有個快取的使用者物件,如果開發者希望更改當前使用者的某個屬性可按如下程式碼操作:
BmobUser *bUser = [BmobUser currentUser];
if (bUser) {
[bUser setObject:self.nameTextField.text forKey:@"username"];
[bUser updateInBackgroundWithResultBlock:^(BOOL isSuccessful, NSError *error) {
if (isSuccessful) {
[self showResultInfo:@"更新使用者成功,去檢視當前使用者資訊吧"];
}else{
NSLog(@"error %@",[error description]);
[self showResultInfo:@"更新使用者失敗,控制檯檢視資訊"];
}
}];
}else{
[self showResultInfo:@"當前未登入"];
}
複製程式碼
一般來說,使用當前使用者物件來進行資料更新可能會遇到一個問題。如果當前使用者上次登入的時間距離當前時間過長,存放在本地的Token就有可能會過期,導致使用者更新資料失敗,這是需要重新登入,登入成功後才能更新資料。
在更新使用者資訊時,如果使用者郵箱有變更並且在管理後臺開啟了郵箱驗證選項的話,Bmob雲後端同樣會自動發動一封郵件驗證資訊給使用者。
六、查詢使用者
查詢使用者和查詢普通物件一樣,只需指定BmobUser類即可,如下:
BmobQuery *query = [BmobUser query];
[query whereKey:@"username" equalTo:self.nameTextField.text];
[query findObjectsInBackgroundWithBlock:^(NSArray *array, NSError *error) {
if (error) {
NSLog(@"%@",error);
[self showResultInfo:@"查詢出錯,檢視控制檯資訊"];
}else{
if (array.count>0) {
for (BmobUser *user in array) { // demo中只有一個使用者,所以把顯示結果的放在迴圈內了
NSLog(@"objectid %@",user.objectId);
NSString *result = [NSString stringWithFormat:@"查詢成功\n使用者名稱:%@\n使用者id:%@",user.username,user.objectId];
[self showResultInfo:result];
}
}else{
[self showResultInfo:@"沒有查詢到結果,請修改資訊後查詢"];
}
}
}];
複製程式碼
在Bmob後臺檢視使用者表
七、修改密碼
使用舊密碼來重置新密碼的介面,示例如下:
修改
BmobUser *user = [BmobUser currentUser];
[user updateCurrentUserPasswordWithOldPassword:self.nameTextField.text newPassword:self.passwordTextField.text block:^(BOOL isSuccessful, NSError *error) {
if (isSuccessful) {
[self showResultWithLoginInfo:user.username];
} else {
NSLog(@"change password error:%@",error);
[self showResultInfo:@"修改失敗,檢視可控制檯訊息"];
}
}];
複製程式碼
修改成功之後登入
//用新密碼登入
[BmobUser loginInbackgroundWithAccount:result andPassword:self.passwordTextField.text block:^(BmobUser *user, NSError *error) {
if (error) {
NSLog(@"login error:%@",error);
[self showResultInfo:@"登入失敗,檢視可控制檯訊息"];
} else {
NSLog(@"user:%@",user);
NSString *result = [NSString stringWithFormat:@"登入成功\n使用者名稱:%@\n使用者ID:%@\n",user.username,user.objectId];
[self showResultInfo:result];
}
}];
複製程式碼
八、郵箱找回(修改)密碼
前提是在註冊操作的時候有新增過郵箱
一旦你引入了一個密碼系統,那麼肯定會有使用者忘記密碼的情況。對於這種情況,我們提供了一種方法,讓使用者安全地重置起密碼。
重置密碼的流程很簡單,開發者只需要求使用者輸入註冊的電子郵件地址即可
[BmobUser requestPasswordResetInBackgroundWithEmail:self.nameTextField.text block:^(BOOL isSuccessful, NSError *error) {
if (isSuccessful) {
[self showResultInfo:@"傳送成功,請去郵箱內檢視郵件"];
}else{
NSLog(@"%@",error);
[self showResultInfo:@"傳送失敗,請檢視控制檯資訊"];
}
}];
複製程式碼
以下為未開啟郵箱驗證和註冊時未繫結郵箱的
密碼重置流程如下:
- 使用者輸入他們的電子郵件,請求重置自己的密碼。
- Bmob向他們的郵箱傳送一封包含特殊的密碼重置連線的電子郵件。
- 使用者根據嚮導點選重置密碼連線,開啟一個特殊的Bmob頁面,根據提示,他們可以輸入一個新的密碼。
- 使用者的密碼已被重置為新輸入的密碼。
九、總結
注意點:
- 需要在Bmob後臺開啟郵箱認證
- Bmob後臺User表裡可新增欄位來完善使用者資訊
- 通過郵箱操作密碼等資訊的需要在註冊是要求使用者驗證郵箱,否則操作失敗
Bmob接入具體操作可檢視上一篇文章
iOS獨立開發者使用Bmob第三方後臺服務初探
本文同步至個人部落格
程式碼傳送門,歡迎star,感興趣的可以留言一起探討。
搜尋公眾號JacerooChu
或掃描下方二維碼一起討論和獲取更多資訊。