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

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より、それぞれの情報を取得し、記述

TWITTER_URL は必須

```.env
#以下、v2
TWITTER_URL="https://your.club/auth/twitter/callback/"

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',
        ],
    ];

```