ログインと登録がTwitterからのみのアプリを作成していて、
こちらを参考にabraham TwitterOAuthと連携してみたものの、アクセストークンの取得がややこしい
Socialiteで簡単にログインと登録しつつ、取れるのでそれを用いてつぶやいてみる
Socialiteで参考にしたのはこちら
Socialiteで登録・ログイン→トークン取得→TwitterOAuthでツイートの流れ
LoginController.php
class LoginController extends Controller
{
use AuthenticatesUsers;
public function __construct()
{
$this->middleware('guest')->except('logout');
}
/**
* 認証ページヘユーザーをリダイレクト
*
* @return \Illuminate\Http\Response
*/
public function redirectToProvider()
{
return Socialite::driver('twitter')->redirect();
}
/**
* ユーザーのアクセストークンを取得する
*
* @return \Illuminate\Http\Response
*/
public function handleProviderCallback()
{
try {
$twitter_user = Socialite::driver('twitter')->user();
//アクセストークン取得
$token = $twitter_user->token;
$token_secret = $twitter_user->tokenSecret;
if ($twitter_user) {
//ユーザーの取得または生成
$user = User::firstOrCreate(['twitter_id' => $twitter_user->id]);
//最新状態に更新
$user->update(
[
'twitter_name' => $twitter_user->name,
'twitter_nickname' => $twitter_user->twitter_nickname,
'twitter_avatar_original' => $twitter_user->avatar_original,
'twitter_oauth_token' => $token,
'twitter_oauth_token_secret' => $token_secret
]
);
Auth::login($user, true);
return redirect()->route('activity.index')->with('success', 'ログインしました');
}
} catch (Exception $e) {
return redirect()->route('top')->with('error', 'Twitterアカウント取得に失敗しました');
}
return redirect()->route('top')->with('erorr', 'エラーが発生しました。再度お試しください');
}
public function logout()
{
Auth::logout();
return redirect()->route('top')->with('success', 'ログアウトしました');
}
}
あとはログイン後のページでつぶやいてやる
Hoge.php
public function tweet()
{
$user = Auth::user();
$twitter_user = new TwitterOAuth(
config('twitter.consumer_key'),
config('twitter.consumer_secret'),
$user->twitter_oauth_token,
$user->twitter_oauth_token_secret
);
//ツイートする
$res = $twitter_user->post("statuses/update", [
"status" => 'ツイート内容'
]);
}
だいぶスッキリしました
アクセストークンはセッションに入れるのと、保存するのどっちが良いのか...
こちらはServiceProviderを作成して、Facadeで呼び出せるようにしているけど、アクセストークンが変わる場合のうまい書き方が思いつかない
なにかアドバイスあればください