- Add Social Login
- Fix Vari
This commit is contained in:
1 parent
22499a85d3
commit
b0bcfad332
19 files changed
+899
-742
No files matched your search
@@ -109,6 +109,23 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
success:(void (^)(AFOAuthCredential *credential))success
|
||||
failure:(void (^)(NSError *error))failure;
|
||||
|
||||
|
||||
/**
|
||||
Creates and enqueues an `NSURLSessionTask` to authenticate against the server using a specified facebook id and facebook token, with a designated scope.
|
||||
|
||||
@param URLString The URL string used to create the request URL.
|
||||
@param facebookID The facebook id used for authentication
|
||||
@param facebookToken The facebook token used for authentication
|
||||
@param scope The authorization scope
|
||||
@param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes a single argument: the OAuth credential returned by the server.
|
||||
@param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error returned from the server.
|
||||
*/
|
||||
- (NSURLSessionTask *)authenticateUsingFacebookOAuthWithURLString:(NSString *)URLString
|
||||
facebookID:(NSString *)facebookid
|
||||
facebookToken:(NSString *)facebookToken
|
||||
scope:(NSString *)scope
|
||||
success:(void (^)(AFOAuthCredential * _Nonnull))success
|
||||
failure:(void (^)(NSError * _Nonnull))failure;
|
||||
/**
|
||||
Creates and enqueues an `NSURLSessionTask` to authenticate against the server with a designated scope.
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ NSString * const kAFOAuthClientCredentialsGrantType = @"client_credentials";
|
||||
NSString * const kAFOAuthPasswordCredentialsGrantType = @"password";
|
||||
NSString * const kAFOAuthCodeGrantType = @"authorization_code";
|
||||
NSString * const kAFOAuthRefreshGrantType = @"refresh_token";
|
||||
NSString * const kAFOAuthFacebookCredentialGrantType = @"provider_facebook_token";
|
||||
|
||||
NSString * const AFOAuth2ErrorDomain = @"com.alamofire.networking.oauth2.error";
|
||||
|
||||
@@ -35,9 +36,9 @@ static NSError * AFErrorFromRFC6749Section5_2Error(id object) {
|
||||
if (![object valueForKey:@"error"] || [[object valueForKey:@"error"] isEqual:[NSNull null]]) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
NSMutableDictionary *mutableUserInfo = [NSMutableDictionary dictionary];
|
||||
|
||||
|
||||
NSString *description = nil;
|
||||
if ([object valueForKey:@"error_description"]) {
|
||||
description = [object valueForKey:@"error_description"];
|
||||
@@ -54,15 +55,15 @@ static NSError * AFErrorFromRFC6749Section5_2Error(id object) {
|
||||
description = NSLocalizedStringFromTable(@"The authorization grant type is not supported by the authorization server.", @"AFOAuth2Manager", @"invalid_request");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (description) {
|
||||
mutableUserInfo[NSLocalizedDescriptionKey] = description;
|
||||
}
|
||||
|
||||
|
||||
if ([object valueForKey:@"error_uri"]) {
|
||||
mutableUserInfo[NSLocalizedRecoverySuggestionErrorKey] = [object valueForKey:@"error_uri"];
|
||||
}
|
||||
|
||||
|
||||
return [NSError errorWithDomain:AFOAuth2ErrorDomain code:-1 userInfo:mutableUserInfo];
|
||||
}
|
||||
|
||||
@@ -101,19 +102,19 @@ static NSError * AFErrorFromRFC6749Section5_2Error(id object) {
|
||||
NSParameterAssert(url);
|
||||
NSParameterAssert(clientID);
|
||||
NSParameterAssert(secret);
|
||||
|
||||
|
||||
self = [super initWithBaseURL:url sessionConfiguration:configuration];
|
||||
if (!self) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
self.serviceProviderIdentifier = [self.baseURL host];
|
||||
self.clientID = clientID;
|
||||
self.secret = secret;
|
||||
self.useHTTPBasicAuthentication = YES;
|
||||
|
||||
|
||||
[self.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
|
||||
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -121,7 +122,7 @@ static NSError * AFErrorFromRFC6749Section5_2Error(id object) {
|
||||
|
||||
- (void)setUseHTTPBasicAuthentication:(BOOL)useHTTPBasicAuthentication {
|
||||
_useHTTPBasicAuthentication = useHTTPBasicAuthentication;
|
||||
|
||||
|
||||
if (self.useHTTPBasicAuthentication) {
|
||||
[self.requestSerializer setAuthorizationHeaderFieldWithUsername:self.clientID password:self.secret];
|
||||
} else {
|
||||
@@ -133,11 +134,11 @@ static NSError * AFErrorFromRFC6749Section5_2Error(id object) {
|
||||
if (!secret) {
|
||||
secret = @"";
|
||||
}
|
||||
|
||||
|
||||
_secret = secret;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark -
|
||||
|
||||
- (NSURLSessionTask *)authenticateUsingOAuthWithURLString:(NSString *)URLString
|
||||
username:(NSString *)username
|
||||
@@ -147,31 +148,53 @@ static NSError * AFErrorFromRFC6749Section5_2Error(id object) {
|
||||
failure:(void (^)(NSError * _Nonnull))failure {
|
||||
NSParameterAssert(username);
|
||||
NSParameterAssert(password);
|
||||
|
||||
|
||||
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
|
||||
[parameters setValue:kAFOAuthPasswordCredentialsGrantType forKey:@"grant_type"];
|
||||
[parameters setValue:username forKey:@"username"];
|
||||
[parameters setValue:password forKey:@"password"];
|
||||
|
||||
|
||||
if (scope) {
|
||||
[parameters setValue:scope forKey:@"scope"];
|
||||
}
|
||||
|
||||
|
||||
return [self authenticateUsingOAuthWithURLString:URLString parameters:parameters success:success failure:failure];
|
||||
}
|
||||
|
||||
- (NSURLSessionTask *)authenticateUsingFacebookOAuthWithURLString:(NSString *)URLString
|
||||
facebookID:(NSString *)facebookid
|
||||
facebookToken:(NSString *)facebookToken
|
||||
scope:(NSString *)scope
|
||||
success:(void (^)(AFOAuthCredential * _Nonnull))success
|
||||
failure:(void (^)(NSError * _Nonnull))failure {
|
||||
NSParameterAssert(facebookid);
|
||||
NSParameterAssert(facebookToken);
|
||||
|
||||
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
|
||||
[parameters setValue:kAFOAuthFacebookCredentialGrantType forKey:@"grant_type"];
|
||||
[parameters setValue:facebookid forKey:@"username"];
|
||||
[parameters setValue:facebookToken forKey:@"password"];
|
||||
|
||||
if (scope) {
|
||||
[parameters setValue:scope forKey:@"scope"];
|
||||
}
|
||||
|
||||
return [self authenticateUsingOAuthWithURLString:URLString parameters:parameters success:success failure:failure];
|
||||
}
|
||||
|
||||
|
||||
- (NSURLSessionTask *)authenticateUsingOAuthWithURLString:(NSString *)URLString
|
||||
scope:(NSString *)scope
|
||||
success:(void (^)(AFOAuthCredential * _Nonnull))success
|
||||
failure:(void (^)(NSError * _Nonnull))failure {
|
||||
|
||||
|
||||
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
|
||||
[parameters setValue:kAFOAuthClientCredentialsGrantType forKey:@"grant_type"];
|
||||
|
||||
|
||||
if (scope) {
|
||||
[parameters setValue:scope forKey:@"scope"];
|
||||
}
|
||||
|
||||
|
||||
return [self authenticateUsingOAuthWithURLString:URLString parameters:parameters success:success failure:failure];
|
||||
}
|
||||
|
||||
@@ -182,12 +205,12 @@ static NSError * AFErrorFromRFC6749Section5_2Error(id object) {
|
||||
failure:(void (^)(NSError *error))failure
|
||||
{
|
||||
NSParameterAssert(refreshToken);
|
||||
|
||||
|
||||
NSDictionary *parameters = @{
|
||||
@"grant_type": kAFOAuthRefreshGrantType,
|
||||
@"refresh_token": refreshToken
|
||||
};
|
||||
|
||||
|
||||
return [self authenticateUsingOAuthWithURLString:URLString parameters:parameters success:success failure:failure];
|
||||
}
|
||||
|
||||
@@ -199,13 +222,13 @@ static NSError * AFErrorFromRFC6749Section5_2Error(id object) {
|
||||
{
|
||||
NSParameterAssert(code);
|
||||
NSParameterAssert(uri);
|
||||
|
||||
|
||||
NSDictionary *parameters = @{
|
||||
@"grant_type": kAFOAuthCodeGrantType,
|
||||
@"code": code,
|
||||
@"redirect_uri": uri
|
||||
};
|
||||
|
||||
|
||||
return [self authenticateUsingOAuthWithURLString:URLString parameters:parameters success:success failure:failure];
|
||||
}
|
||||
|
||||
@@ -220,7 +243,7 @@ static NSError * AFErrorFromRFC6749Section5_2Error(id object) {
|
||||
mutableParameters[@"client_secret"] = self.secret;
|
||||
}
|
||||
parameters = [NSDictionary dictionaryWithDictionary:mutableParameters];
|
||||
|
||||
|
||||
NSURLSessionTask *task;
|
||||
task = [self POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
||||
if (!responseObject) {
|
||||
@@ -229,46 +252,46 @@ static NSError * AFErrorFromRFC6749Section5_2Error(id object) {
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if ([responseObject valueForKey:@"error"]) {
|
||||
if (failure) {
|
||||
failure(AFErrorFromRFC6749Section5_2Error(responseObject));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NSString *refreshToken = [responseObject valueForKey:@"refresh_token"];
|
||||
if (!refreshToken || [refreshToken isEqual:[NSNull null]]) {
|
||||
refreshToken = [parameters valueForKey:@"refresh_token"];
|
||||
}
|
||||
|
||||
|
||||
AFOAuthCredential *credential = [AFOAuthCredential credentialWithOAuthToken:[responseObject valueForKey:@"access_token"] tokenType:[responseObject valueForKey:@"token_type"]];
|
||||
|
||||
|
||||
|
||||
|
||||
if (refreshToken) { // refreshToken is optional in the OAuth2 spec
|
||||
[credential setRefreshToken:refreshToken];
|
||||
}
|
||||
|
||||
|
||||
// Expiration is optional, but recommended in the OAuth2 spec. It not provide, assume distantFuture === never expires
|
||||
NSDate *expireDate = [NSDate distantFuture];
|
||||
id expiresIn = [responseObject valueForKey:@"expires_in"];
|
||||
if (expiresIn && ![expiresIn isEqual:[NSNull null]]) {
|
||||
expireDate = [NSDate dateWithTimeIntervalSinceNow:[expiresIn doubleValue]];
|
||||
}
|
||||
|
||||
|
||||
if (expireDate) {
|
||||
[credential setExpiration:expireDate];
|
||||
}
|
||||
|
||||
|
||||
if (success) {
|
||||
success(credential);
|
||||
}
|
||||
|
||||
|
||||
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
|
||||
if (failure) {
|
||||
failure(error);
|
||||
}
|
||||
}];
|
||||
|
||||
|
||||
return task;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user