Auto Login Dropbox account on Core Api without Login Prompt

后端 未结 2 2276
天涯浪人
天涯浪人 2020-11-29 14:11

I am new to iOs development and I\'m creating an app that uses my own dropbox account. I want my app to automatically login to my account to be able to modify & add file

相关标签:
2条回答
  • 2020-11-29 14:25

    Sorry, I couldn't follow the accepted answer and Greg seems very reluctant to provide example code since Dropbox doesn't recommend using a secret key in this way. For anyone who needs a quick solution to (for example) uploading zip files into a single dropbox account WITHOUT using what I consider the rather opaque dropbox iOS SDK API, the following works (DropboxOAuthKey is the secret key that you press the button to generate in the app console):

    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    sessionConfiguration.HTTPAdditionalHeaders = @{
                                                           @"Authorization" : [NSString stringWithFormat:@"Bearer %@", DropboxOAuthKey],
                                                           @"Content-Type"  : @"application/zip"
                                                           };
    
    NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: sessionConfiguration delegate: self delegateQueue: [NSOperationQueue mainQueue]];
    self.request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://api-content.dropbox.com/1/files_put/auto/%@?overwrite=false",fileName]]];
    [self.request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
    NSData *data = [[NSFileManager defaultManager] contentsAtPath:zippedPath];
    [self.request setHTTPMethod:@"PUT"];
    [self.request setHTTPBody:data];
    [self.request setTimeoutInterval:1000];
    
    NSURLSessionDataTask *doDataTask = [defaultSession dataTaskWithRequest:self.request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                if (!error){
                    NSLog(@"WORKED!!!!");
                } else {
                    NSLog(@"ERROR: %@", error);
                }
            }];
    
    [doDataTask resume];
    
    0 讨论(0)
  • 2020-11-29 14:27

    The Dropbox API was designed with the intention that each user would link their own Dropbox account, in order to interact with their own files. However, it is technically possible to connect to just one account. The SDKs don't offer explicit support for it and we don't recommend doing so, for various technical and security reasons.

    However if you did want to go this route, instead of kicking off the authorization flow, you would manually use an existing access token for your app. (Just be careful not to revoke it, e.g. via https://www.dropbox.com/account/security .) In the iOS Core SDK you'd need to use:

    - (void)updateAccessToken:(NSString *)token accessTokenSecret:(NSString *)secret forUserId:(NSString *)userId;
    

    Again though, this isn't a good idea. Since this would be a client-side app, any malicious user of your app could extract the access token and use it to bypass any access restrictions your app attempted to enforce. For example, they could access content they shouldn't or add or replace content with a malicious payload that other users would access.

    0 讨论(0)
提交回复
热议问题