LoginSignup
12
5

More than 3 years have passed since last update.

[雑メモ]Socialiteとabraham/twitteroauthで複数アカウントでツイート

Posted at

ログインと登録が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で呼び出せるようにしているけど、アクセストークンが変わる場合のうまい書き方が思いつかない

なにかアドバイスあればください

12
5
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
12
5