【第三方登录】Twitter

创建应用

在这里插入图片描述
APPID 和 相关回调配置
在这里插入图片描述
重新设置api key 和 api secret
在这里插入图片描述
设置回调和网址 还有 APP的类型
在这里插入图片描述
拿到ClientID 和 Client Secret
在这里插入图片描述

源码实现

  • 获取Twitter 的登录地址
public function twitterUrl()
{
     global $db,$request,$comId;
 
      require "inc/twitter_client/twitteroauth.php";    
      // Create TwitterOAuth obj instance
      $twitteroauth = new \TwitterOAuth('配置 API key', '配置 API Key Secret');
      // Requesting authentication tokens, the parameter is the URL we will be redirected to
      $redirectUrl = 'https://tocmodels.com/Twitter';
      $request_token = $twitteroauth->getRequestToken($redirectUrl);
      // save to mysql 记录token和token_secret
      $log = array(
          'oauth_token' => $request_token['oauth_token'],
          'oauth_token_secret' => $request_token['oauth_token_secret'],
          'status' => 0,
          'user_id' => 0,
          'screen_name' => '',
          'dtTime' => date("Y-m-d H:i:s")
      );
      
      $db->insert_update("twitter_token_log", $log, "id");
      
      // no error
      if($twitteroauth->http_code==200){
          	// Let's generate the URL and redirect
          	$loginUrl = $twitteroauth->getAuthorizeURL($request_token['oauth_token']);     
          
	        $return['code'] = 1;
	  		$return['message'] = '获取成功';
	  		$return['data'] = array();
	  		$return['data']['url'] = $loginUrl;
	  		
	  		return json_encode($return,JSON_UNESCAPED_UNICODE); 
      } else {
          // error
          return '{"code":0,"message":"Get Twitter login url fail!"}';
      }        
}
  • 回调跳转链接上有两个参数 oauth_verifieroauth_token,通过两个值获取用户标识
	public function twitterLogin()
    {
        global $db,$request,$comId;
        
        require "inc/twitter_client/twitteroauth.php";        
        
        $oauth_verifier = $request['oauth_verifier'];
        if(empty($oauth_verifier)) return '{"code":0,"message":"oauth_verifier 为必传参数"}';  
        
        $oauth_token = $request['oauth_token'];
        if(empty($oauth_token)) return '{"code":0,"message":"oauth_token 为必传参数"}';  
                
        
        $log = $db->get_row("select * from twitter_token_log where oauth_token = '$oauth_token' and status = 0 ");
        if(!$log) return '{"code":0,"message":"无效的 oauth_token "}';  
    
        $oauth_token_secret = $log->oauth_token_secret;
        //api key  和 api key secret
        $twitteroauth = new \TwitterOAuth('配置 api key', 'api key secret ', $oauth_token, $oauth_token_secret);

        $access_token = $twitteroauth->getAccessToken($oauth_verifier);           
        
        $twitter_uid = $access_token['user_id'];//Twitter 的用户id
        $screen_name = $access_token['screen_name'];//Twitter 的用户 名称
    
        $user = $db->get_row("select * from users where twitter_uid = '$twitter_uid' ");
        //TODO 剩下就是存入自己的数据和登录逻辑
       
    }
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需将其暴露给客户端。工厂模式可以帮助我们封装对象的创建过程,使代码更加灵活和可维护。 对于第三方登录,我们可以使用工厂模式进行封装。具体实现如下: 1. 定义一个接口或抽象类,用于表示第三方登录的功能。 ```java public interface ThirdPartyLogin { void login(); } ``` 2. 创建具体的第三方登录类,实现接口或抽象类中的方法。 ```java public class FacebookLogin implements ThirdPartyLogin { @Override public void login() { // 实现 Facebook 登录功能 } } public class TwitterLogin implements ThirdPartyLogin { @Override public void login() { // 实现 Twitter 登录功能 } } public class GoogleLogin implements ThirdPartyLogin { @Override public void login() { // 实现 Google 登录功能 } } ``` 3. 创建工厂类,用于实例化具体的第三方登录类。 ```java public class ThirdPartyLoginFactory { public ThirdPartyLogin createLogin(String type) { switch (type) { case "Facebook": return new FacebookLogin(); case "Twitter": return new TwitterLogin(); case "Google": return new GoogleLogin(); default: throw new IllegalArgumentException("Invalid login type: " + type); } } } ``` 4. 在客户端中使用工厂类创建第三方登录对象。 ```java public class Client { public static void main(String[] args) { ThirdPartyLoginFactory factory = new ThirdPartyLoginFactory(); ThirdPartyLogin login1 = factory.createLogin("Facebook"); login1.login(); ThirdPartyLogin login2 = factory.createLogin("Twitter"); login2.login(); ThirdPartyLogin login3 = factory.createLogin("Google"); login3.login(); } } ``` 使用工厂模式对第三方登录进行封装,可以使代码更加简洁、灵活和可维护。客户端只需要知道工厂类和接口或抽象类,无需知道具体的实现细节。如果需要添加新的第三方登录功能,只需要创建新的具体类并在工厂类中添加相应的逻辑即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值