1
This commit is contained in:
@@ -6,7 +6,11 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
typedef NS_ENUM(NSInteger, UserSex) {
|
||||
UserSexMan = 0, // 男
|
||||
UserSexWeman = 1, // 女
|
||||
UserSexTwoSex = 2, // 两性
|
||||
};
|
||||
@interface KBUser : NSObject
|
||||
|
||||
// 标识
|
||||
@@ -14,12 +18,13 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
// 基本信息
|
||||
@property (nonatomic, copy, nullable) NSString *nickName;
|
||||
@property (nonatomic, copy, nullable) NSString *avatarUrl; // 头像 URL
|
||||
@property (nonatomic, copy, nullable) NSString *gender; // 性别(后端可能返回 string/int,统一转字符串存)
|
||||
/// 0
|
||||
@property (nonatomic, assign) UserSex gender; // 性别(后端可能返回 string/int,统一转字符串存)
|
||||
@property (nonatomic, copy, nullable) NSString *email;
|
||||
/// 邮箱是否验证
|
||||
@property (nonatomic, assign) BOOL emailVerified;
|
||||
|
||||
// 会话信息
|
||||
// token
|
||||
@property (nonatomic, copy, nullable) NSString *token; // token/access_token/accessToken
|
||||
|
||||
@end
|
||||
|
||||
@@ -10,9 +10,26 @@
|
||||
+ (NSDictionary *)mj_replacedKeyFromPropertyName {
|
||||
return @{
|
||||
@"userId": @[@"uid"],
|
||||
@"gender": @[@"gender", @"sex"],
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
+ (id)mj_newValueFromOldValue:(id)oldValue property:(MJProperty *)property {
|
||||
if ([property.name isEqualToString:@"gender"]) {
|
||||
if ([oldValue isKindOfClass:[NSNumber class]]) {
|
||||
NSInteger intValue = [(NSNumber *)oldValue integerValue];
|
||||
if (intValue >= UserSexTwoSex && intValue <= UserSexMan) {
|
||||
return @(intValue);
|
||||
} else {
|
||||
// 如果收到非法值,可以返回默认值
|
||||
KBLOG(@"⚠️ 收到非法的userStatus值: %ld", (long)intValue);
|
||||
return @(UserSexMan);
|
||||
}
|
||||
}
|
||||
return @(UserSexMan);
|
||||
}
|
||||
return oldValue;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@@ -24,6 +24,14 @@ typedef void(^KBLoginCompletion)(BOOL success, NSError * _Nullable error);
|
||||
- (void)signInWithAppleFromViewController:(UIViewController *)presenter
|
||||
completion:(KBLoginCompletion)completion;
|
||||
|
||||
|
||||
/// 邮箱登录
|
||||
- (void)signInWithAppleFromViewController:(UIViewController *)presenter
|
||||
completion:(KBLoginCompletion)completion;
|
||||
|
||||
/// 邮箱登录
|
||||
- (void)emailLoginEmail:(NSString *)email password:(NSString *)password WithCompletion:(KBLoginCompletion)completion;
|
||||
|
||||
/// 是否已登录:由 KBAuthManager 判断(是否存在有效 token)
|
||||
- (BOOL)isLoggedIn;
|
||||
|
||||
|
||||
@@ -70,6 +70,35 @@
|
||||
}];
|
||||
}
|
||||
|
||||
/// 邮箱登录
|
||||
- (void)emailLoginEmail:(NSString *)email password:(NSString *)password WithCompletion:(KBLoginCompletion)completion;
|
||||
{
|
||||
[KBHUD show];
|
||||
NSMutableDictionary *params = [NSMutableDictionary dictionary];
|
||||
if (email.length) params[@"email"] = email;
|
||||
if (password.length) params[@"password"] = password;
|
||||
// 向服务端发起校验
|
||||
[[KBNetworkManager shared] POST:API_EMAIL_LOGIN jsonBody:params headers:nil completion:^(NSDictionary * _Nullable jsonOrData, NSURLResponse * _Nullable response, NSError * _Nullable error) {
|
||||
[KBHUD dismiss];
|
||||
if (error) { if (completion) completion(NO, error); return; }
|
||||
NSDictionary *dict = jsonOrData[@"data"];
|
||||
KBUser *user = [KBUser mj_objectWithKeyValues:dict];
|
||||
self.currentUser = user;
|
||||
if (user.token.length == 0) {
|
||||
if (completion) completion(NO, [NSError errorWithDomain:@"KBLogin" code:-2 userInfo:@{NSLocalizedDescriptionKey: KBLocalized(@"No token returned")}]);
|
||||
return;
|
||||
}
|
||||
[[KBUserSessionManager shared] handleLoginSuccessWithUser:user];
|
||||
completion(true,nil);
|
||||
// 保存登录态到共享钥匙串;供 App 与扩展共享
|
||||
// BOOL ok = [[KBAuthManager shared] saveAccessToken:user.token
|
||||
// refreshToken:nil
|
||||
// expiryDate:nil
|
||||
// userIdentifier:cred.user];
|
||||
// if (completion) completion(ok, ok ? nil : [NSError errorWithDomain:@"KBLogin" code:-3 userInfo:@{NSLocalizedDescriptionKey: KBLocalized(@"Failed to save login state")}]);
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark - Helpers
|
||||
|
||||
// 宽松解析:token / access_token / accessToken,支持顶层或 data/user 层
|
||||
|
||||
Reference in New Issue
Block a user