美文网首页
使用微博账号登陆

使用微博账号登陆

作者: Mustard_Buli | 来源:发表于2016-03-29 19:04 被阅读266次

微博开放平台

使用OAuth2
1.获取新浪的登录界面(UIWebView)
2.登陆成功后,会从服务器获取一个状态码(code)
3.用code向服务器换取一个accessToken令牌

//登陆
- (IBAction)loginBtnDidClicked:(UIButton *)sender {
    //1.使用OAuth2/authorize发起请求
    NSString *urlString = [NSString stringWithFormat:@"https://api.weibo.com/oauth2/authorize?client_id=%@&redirect_uri=%@", kAppKey, kRedirect_uri];
    NSURL *url = [NSURL URLWithString:urlString];
    
    //创建请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
    
    //使用UIWebView加载页面
    self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    _webView.delegate = self;
    [self.view addSubview:_webView];
    [_webView loadRequest:request];
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    //目标:获取code的状态码
    //解决方案:对即将加载的request对应的URL进行解析,一旦URL里面包含code=,那么就停止
    if ([[request.URL relativeString] containsString:@"code="]) {
        //说明此刻即将请求的request里面包含了code
        NSRange range  = [[request.URL relativeString] rangeOfString:@"code="];
        NSString *code = [[request.URL relativeString] substringFromIndex:range.location + range.length];
        
        //关闭webView
        [_webView removeFromSuperview];
        
        //使用这个code去换取一个accessToken令牌
        //解决方案,向服务器发送一个POST请求
        NSURL *codeURL = [NSURL URLWithString:@"https://api.weibo.com/oauth2/access_token"];
        //创建一个可变请求(因为要修改头部信息)
        NSMutableURLRequest *codeResquest = [NSMutableURLRequest requestWithURL:codeURL];
        
        //设置请求方式为POST
        [codeResquest setHTTPMethod:@"POST"];
        
        //准备上传的数据
        NSString *dataString = [NSString stringWithFormat:@"client_id=%@&client_secret=%@&grant_type=authorization_code&code=%@&redirect_uri=%@", kAppKey, kAppSecret, code, kRedirect_uri];
        NSData *upData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
        
        //创建session
        NSURLSession *session = [NSURLSession sharedSession];;
        NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:codeResquest fromData:upData completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            //NSData -> NSDictionary
            NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
            
            //保存access_token expires_in uid
            NSString *accessToken = [resultDic objectForKey:@"access_token"];
            NSString *expiresIn   = [resultDic objectForKey:@"expires_in"];
            NSString *uid         = [resultDic objectForKey:@"uid"];
            
            NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
            [userDefaults setObject:accessToken forKey:kAccessTokenKey];
            [userDefaults setObject:expiresIn forKey:kExpiresTimeKey];
            [userDefaults setObject:uid forKey:kUserIDKey];
            [userDefaults synchronize];
            }];
        
        [uploadTask resume];
        return NO;
    } else{
        return YES;
    }
}

相关文章

  • 使用微博账号登陆

    微博开放平台 使用OAuth21.获取新浪的登录界面(UIWebView)2.登陆成功后,会从服务器获取一个状态码...

  • 第三方之联合登陆(微信)

    前言 App联合登陆很常用,包括使用qq、微信、微博账号登陆等,这篇记录下微信登陆的接入流程。 接入流程 1:申请...

  • 多账号统一登陆,账号模块的系统设计

    现在几乎大部分的 App都支持使用多个第三方账号进行登录,如:微信、QQ、微博等,我们把此称为多账号统一登陆。而这...

  • python+opencv 模板暴力匹配

    背景 在做微博自动登陆部分的时候, 发现有的账号需要验证码, 微博使用的是极验验证码,开始尝试用css直接定位过去...

  • 探讨APP登录设计方式以及如何设计登录模块

    1、熟悉目前常见的手机APP登陆方式 ① 账号登陆(手机、邮箱) ② 第三方登陆(微信,QQ,微博) ③ 一键快捷...

  • JAVA怎么使用MetaMask作OAuth认证登陆

    最近开发DAPP项目需要使用以太坊账号,与微信/QQ/微博等OAuth认证登陆类似。 老外写的这个认证流程不错,流...

  • 朋友人在国外,谨防诈骗

    今天上午收到大学室友的微博新号好友申请,说是在国外网络受限无法登陆微信等,只能登陆微博国际版,所以申请了新的账号来...

  • FAQ丨「imin我在」常见问题答疑

    1. 账户管理 Q 如何注册、登陆imin? 你可通过手机下载imin,在手机上注册。支持微信、微博、QQ账号登陆...

  • 记录与简书的重逢

    今天我重新下载了简书 登陆时 我试了微博账号 不是 又试了微信账号 还不是 莫非是QQ账号 果然 我他妈的为什么不...

  • 友盟 新浪微博登录取消自动登录

    像美团一样,用微博第三方登录不是自动登录,而是可以选择账号的话,在登陆完成或者登陆之前加这句话, 取消新浪微博的登...

网友评论

      本文标题:使用微博账号登陆

      本文链接:https://www.haomeiwen.com/subject/otlllttx.html