LoginSignup
0
0

twitterapi oauth2.0 で ログイン、ツイートまで

Last updated at Posted at 2023-06-12

twitter oauth2 を使いたい。
socialite 5.x から対応している。

追記

OAuth 2.0(Bearer Token)はTwitter APIにおいて主にアプリレベルでの認証に使用されます。このトークンではユーザー固有のアクション(例:ユーザーをフォローする、ツイートする等)を行うことはできません。

ユーザー固有のアクションを行う場合は、OAuth 1.0aを使用してユーザーからaccess_tokenとaccess_token_secretを取得する必要があります。これらのトークンを用いてユーザーを代わりにフォローしたり、ツイートを投稿したりすることができます。

簡単に言えば、OAuth 2.0のトークンではユーザーをフォローする機能は使えません。ユーザーをフォローするにはOAuth 1.0aで取得したaccess_tokenとaccess_token_secretを使用する必要があります。

よくわからんがユーザーをフォローする機能が使えない。
oauth1.0a を使ったほうがいいね。

インスコ

composer require abraham/twitteroauth
composer require laravel/socialite
composer require socialiteproviders/twitter

twitter appsより、それぞれの情報を取得し、記述

.env
TWITTER_URL="https://your.club/auth/twitter/callback/"
TWITTER_BEARER="xxxxxxxxx"
#以下、v2
TWITTER_CLIENT_ID = "xxxxxxxxx"
TWITTER_CLIENT_SECRET = "xxxxxxxxxx"
\config\services.php
'twitter' => [
    'client_id'     => env('TWITTER_CLIENT_ID'),
    'client_secret' => env('TWITTER_CLIENT_SECRET'),
    'redirect'      => env('TWITTER_URL'),
    'oauth'         => 2
],
web.php

Route::get('/auth/twitter', 'App\Http\Controllers\OAuthLoginsController@login');
Route::get('/auth/twitter/callback', 'App\Http\Controllers\OAuthLoginsController@authTwitterCallback');

oauthloginscontroller.php

use Laravel\Socialite\Facades\Socialite;
use Abraham\TwitterOAuth\TwitterOAuth;

class OAuthLoginsController extends Controller
{

    public static function login(request $request)
    {
        return Socialite::driver('twitter')
            ->scopes([
                'tweet.read',
                'tweet.write',
                'users.read',
                'follows.write'
                ])
            ->redirect();
    }

    public static function authTwitterCallback(request $request)
    {
        $social = Socialite::driver('twitter')->user();

        $connection = new TwitterOAuth(
            env('TWITTER_CLIENT_ID'),
            env('TWITTER_CLIENT_SECRET'),
            null,
            $social->token
        );

        $connection->setApiVersion("2");

        $result = $connection->post("tweets", ["text" => "API v2のテスト".time()], true); # trueを忘れないよう

        var_dump($result);
        var_dump("戻ってきましたよ");
        die();

    }


}

これで、/auth/twitter/ にアクセスすれば
・twitter auth2 でログイン
・ログイン後 ツイート

の2つができる。

scope一覧

以下、twitteroauthのスコープ一覧
※未確認



tweet.read: すべてのツイートを表示します。保護されたアカウントからのツイートも含みます。
tweet.write: ツイートとリツイートを行います。
tweet.moderate.write: ツイートへの返信を非表示にしたり表示したりします。
users.read: 任意のアカウントを表示します。これには保護されたアカウントも含まれます。
follows.read: フォローしている人とフォローされている人を表示します。
follows.write: 人々をフォローしたりフォローを解除したりします。
offline.access: アクセスをリボークするまでアカウントに接続し続けます。
space.read: 表示できるすべてのスペースを表示します。
mute.read: ミュートしたアカウントを表示します。
mute.write: アカウントをミュートしたりミュートを解除したりします。
like.read: 「いいね」したツイートと表示できる「いいね」を表示します。
like.write: ツイートに「いいね」したり、「いいね」を取り消したりします。
list.read: 作成したリストやメンバーになっているリスト、プライベートリストを含むリストのメンバーやフォロワーを表示します。
list.write: リストを作成したり管理したりします。
block.read: ブロックしたアカウントを表示します。
block.write: アカウントをブロックしたりブロックを解除したりします。
bookmark.read: 認証済みユーザーからブックマークしたツイートを取得します。
bookmark.write: ツイートにブックマークを追加したり、ブックマークを削除したりします1。

その他

また、以下を追記せよとの記事も見かけたが、追記しなくても動作する。

app.php
    'providers' => [
        SocialiteProviders\Manager\ServiceProvider::class,
EventServiceProvider.php

    protected $listen = [

        SocialiteWasCalled::class => [
            'SocialiteProviders\\Twitter\\TwitterExtendSocialite@handle',
        ],
    ];

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0