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