测试已测试 | ✓ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布上次发布 | 2015 年 7 月 |
由 Patryk Kaczmarek、Radosław Szeja 维护。
依赖项 | |
UICKeyChainStore | ~> 1.1 |
ngrvalidator | ~> 1.1.0 |
XLForm | ~> 2.1 |
devise-ios 是一个自动连接 Devise 的简单客户端。专门创建用于与 devise-ios 后端 gem 一起工作,使您的工作更加容易和快速!
devise-ios 实现
gem install cocoapods
来获取!)当您想要使用 devise-ios 时,请使用 #import <Devise/Devise.h>
。
[DVSConfiguration sharedConfiguration]
是一个单例,用于将配置保存在一个地方。在您的 AppDelegate
中的 application:didFinishLaunchingWithOptions:
方法中的某个地方,最初开始时使用
[[DVSConfiguration sharedConfiguration] setServerURL:<#NSURL#>];
devise-ios 还能通知您遇到的问题。日志在调试过程中特别有用。设计了 3 种日志级别
DVSLoggingModeNone
- 不记录任何内容,忽略所有消息。DVSLoggingModeWarning
- 使用 NSLog 打印所有消息。DVSLoggingModeAssert
- 使用消息终止代码。要指定日志模式,请使用
[[DVSConfiguration sharedConfiguration] setLoggingMode:<#DVSLoggingMode#>];
devise-ios 负责处理网络问题,并且在连接问题时能够自动重试请求。您可以使用 DVSConfiguration
的 numberOfRetries
和 retryTresholdDuration
属性来指定重试次数和重试间隔。
Devise 在内部使用 AFNetworking
。如果需要启用网络活动指示器,请在 AppDelegate application:didFinishLaunchingWithOptions:
中使用 AFNetworkActivityIndicatorManager
。
devise-ios 的主要类是 DVSUserManager
。提供的实现足以实现登录、注册、编辑以及 devise-ios 提供的其他所有功能。
功能相当直观且具有自我解释性。
用户注册
- (void)registerWithSuccess:(DVSVoidBlock)success failure:(DVSErrorBlock)failure;
资料更新
- (void)updateWithSuccess:(DVSVoidBlock)success failure:(DVSErrorBlock)failure;
登录
- (void)loginWithSuccess:(DVSVoidBlock)success failure:(DVSErrorBlock)failure;
使用 Facebook 账户登录
- (void)signInUsingFacebookWithSuccess:(DVSVoidBlock)success failure:(DVSErrorBlock)failure;
使用Google Plus账号登录
- (void)signInUsingGoogleWithSuccess:(DVSVoidBlock)success failure:(DVSErrorBlock)failure;
为了处理来自Google Plus授权的回调,请在AppDelegate
方法中实现以下之一
- (BOOL)application: (UIApplication *)application openURL: (NSURL *)url sourceApplication: (NSString *)sourceApplication annotation: (id)annotation {
return [[DVSUserManager defaultManager] handleURL:url sourceApplication:sourceApplication annotation:annotation];
//or instance of other DVSUserManager used to sign in via g+.
}
这样确保至少有一个传递的回调会在授权结果中被调用。
密码提示
- (void)remindPasswordWithSuccess:(DVSVoidBlock)success failure:(DVSErrorBlock)failure;
密码更新
- (void)changePasswordWithSuccess:(DVSVoidBlock)success failure:(DVSErrorBlock)failure;
账户删除
- (void)deleteAccountWithSuccess:(DVSVoidBlock)success failure:(DVSErrorBlock)failure;
尽管DVSUser
的实现足够用于基本使用,但您也可以进行自定义。
如果需要持久化本地关于DVSUser
子类的更多信息(除了email
,sessionToken
和identifier
之外 - 这些默认存储),则遵守DVSUserPersisting
协议。您可以通过调用来选择哪些属性应该持久化
- (NSArray *)propertiesToPersistByName;
只需记住传递属性名称时作为NSString
。
devise-ios底层使用NGRValidator进行数据验证。在此基础上,devise-ios提供了一个功能,可以为您的自定义验证规则或修改默认验证规则。如果您想从中受益,遵守DVSUserManagerDelegate
协议并实现- (void)userManager:(DVSUserManager *)manager didPrepareValidationRules:(NSMutableArray *)validationRules forAction:(DVSActionType)action;
方法。
假设DVSUser
的一个子类有一个额外的属性NSString *registrationUsername
,您想在注册过程中对其进行验证以满足条件
如果验证失败,则显示适当的消息
此外,registrationUsername
对用户来说听起来不太好,因此应将其显示为“用户名”
- (void)userManager:(DVSUserManager *)manager didPrepareValidationRules:(NSMutableArray *)validationRules forAction:(DVSActionType)action {
NGRPropertyValidator *validator = NGRValidate(@"registrationUsername").required().lengthRange(5, 20).msgTooShort(@"should have at least 4 signs.").msgTooLong(@"should have at most 20 signs").localizedName(@"Username");
[validationRules addObject:validator];
}
当用户为registrationUsername
属性提供字符串foo
时,devise-ios将返回一个带有本地化描述的NSError
NSLog(@"%@", error.localizedDescription);
// Username should have at least 4 characters.
就是这样!有关更多信息,请参阅NGRValidator。
好的。但是,您创建DVSUser
子类的目的不是为了本地使用,对吧?要附加自己的参数到请求,请像下面一样遵守DVSUserJSONSerializerDataSource
- (void)setupManager {
TestUser *user = [[TestUser alloc] init]; //TestUser is subclass of DVSUser with "foo" property
self.manager = [[DVSUserManager alloc] initWithUser:user]; //manager is an ivar here
self.manager.serializer.dataSource = self;
}
#pragma mark - DVSUserJSONSerializerDataSource
- (NSDictionary *)additionalRequestParametersForAction:(DVSActionType)action {
//use action to distinguish type of request
TestUser *user = (TestUser *)self.manager.user;
//make sure that foo is not nil. Eg. add own validation rule in userManager:didPrepareValidationRules:forAction: method
return @{@"foo" : user.foo};
}
devise-ios会处理其余部分。
在您的应用中某个时刻,您可能希望为用户提供快速设置,并允许他们登录和注册。devise-ios提供了一个方便的视图控制器,称为DVSAccountRetrieverViewController
,它简化了此过程。以下是一个简单的使用示例
DVSAccountRetrieverViewController *logInController = [[DVSAccountRetrieverViewController alloc] initWithType:DVSRetrieverTypeLogIn fields:DVSAccountRetrieverFieldEmailAndPassword | DVSAccountRetrieverFieldProceedButton];
logInController.delegate = self;
[self.navigationController pushViewController:logInController animated:YES];
简单吧?如你所见,初始化器接收两个参数:type
和fields
。第一个参数定义了视图控制器将如何显示和操作。如果您想执行登录操作,应传递DVSRetrieverTypeLogIn
。使用DVSAccountRetrieverViewController
将会自动配置继续按钮标题和点击事件来执行登录请求。对于注册操作,可以使用DVSRetrieverTypeSignUp
类型。
fields
是选项参数,定义了视图的哪些部分应该可见。例如,如果您想使用仅包含文本字段和继续按钮的简单表单,应定义如下fields
DVSAccountRetrieverFields logInFields = DVSAccountRetrieverFieldEmailAndPassword | DVSAccountRetrieverFieldProceedButton;
结果将是
如果您想向表单中添加密码提示,请使用以下组合
DVSAccountRetrieverFields logInFields = DVSAccountRetrieverFieldEmailAndPassword | DVSAccountRetrieverFieldProceedButton | DVSAccountRetrieverFieldPasswordReminder;
结果
为了处理执行操作的结果,您的类应重写两个DVSAccountRetrieverViewControllerDelegate
协议方法
// for success
- (void)accountRetrieverViewController:(DVSAccountRetrieverViewController *)controller didSuccessForAction:(DVSRetrieverAction)action user:(DVSUser *)user;
// for failure
- (void)accountRetrieverViewController:(DVSAccountRetrieverViewController *)controller didFailWithError:(NSError *)error forAction:(DVSRetrieverAction)action;
在两种情况下,视图控制器将返回 action
变量,它定义完成操作的类型并可以具有以下值之一:DVSRetrieverActionLogIn
、DVSRetrieverActionSignUp
、DVSRetrieverActionPasswordRemind
。成功回调还将在 user
中返回相应的用户对象。
DVSAccountRetrieverViewController
不实现自动关闭功能。开发者负责决定何时关闭视图。为了帮助完成此任务,devise-ios 在 DVSAccountRetrieverViewControllerDelegate
中提供额外的回调,它将在用户点击关闭按钮时执行。
- (void)accountRetrieverViewControllerDidTapDismiss:(DVSAccountRetrieverViewController *)controller;
实现完整的账户生命周期。还包括一个简单的 DVSUser
子类化和验证示例。要运行演示,请按照以下说明操作
$ git clone --recursive [email protected]:netguru/devise-ios.git
$ pod install
如果还没有用 --recursive
克隆项目
$ git submodule update --init --recursive
$ pod install
devise-ios 在 MIT 许可 下可用。
首先,感谢您的贡献!
以下是您需要遵循的一些指南
有疑问?请 提出问题!您还可以阅读我们的博客文章 宣布 devise-iOS 简化的身份验证。
版权 © 2014-2015 Netguru