Yii2로 OAuth 로그인

3793 단어 PHPOAuthYii
yiisoft/yii2-authclient 라는 공식의 확장으로 OAuth 로그인의 구현이 적다는 이야기

twitter나 fb로의 로그인을 구현하려고 하면 어느 Auth 클라이언트 사용하는지, 각각 다른 익스텐션 준비하거나 해서 번거로움 하거나 하는 것입니다만, 공식의 OAuth 익스텐션이 대단하다

우선 표준 클라이언트가 많
  • Facebook
  • GitHub
  • GoogleOAuth
  • GoogleOpenId
  • LinkedIn
  • Live
  • Twitter
  • VKontakte
  • YandexOAuth
  • YandexOpenId

  • Yandex라든지 일본에 익숙하지 않은 이름입니다만, 무엇인가라고 하면 러시아의 최대수 검색 서비스라고 합니다. Yii가 구 공산권에서 인기이므로 수요 있겠지요 분명.

    fb와 twitter와 github와 google이 있으면 더 이상 곤란하지 않을까라고 생각합니다만, 이것 이외의 사이트를 이용하는 경우도 독자적으로 클라이언트를 쓰면 대응할 수 있습니다.
    클라이언트 설정도 매우 간단합니다. 그래서 쉽게 대응할 수 있을 것 같습니다. (이것은 또 다른 기사에서)

    내장도 간단.
    composer에서 authclient 추가

    composer.json
             "php": ">=5.4.0",
             "yiisoft/yii2": "*",
             "yiisoft/yii2-bootstrap": "*",
    -        "yiisoft/yii2-swiftmailer": "*"
    +        "yiisoft/yii2-swiftmailer": "*",
    +        "yiisoft/yii2-authclient": "*"
         },
    

    설정에 사용하는 OAuth 클라이언트 추가

    config/web.php
         'basePath' => dirname(__DIR__),
         'bootstrap' => ['log'],
         'components' => [
    +        'authClientCollection' => [
    +            'class' => 'yii\authclient\Collection',
    +            'clients' => [
    +                'google' => [
    +                    'class' => 'yii\authclient\clients\GoogleOpenId'
    +                ],
    +                'facebook' => [
    +                    'class' => 'yii\authclient\clients\Facebook',
    +                    'clientId' => '<<FaceBookAppClientId>>', // Facebookで作成したアプリのキー情報
    +                    'clientSecret' => '<<FaceBookAppClientSecret>>',
    +                ],
    +            ],
    +        ],
    

    루트에 해당하는 컨트롤러에 콜백 추가

    controllers/SiteController.php
                     'class' => 'yii\captcha\CaptchaAction',
                     'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
                 ],
    +            'auth' => [
    +                'class' => 'yii\authclient\AuthAction',
    +                'successCallback' => [$this, 'successCallback'],
    +            ],
             ];
         }
    
    +    public function successCallback($client)
    +    {
    +        $attributes = $client->getUserAttributes();
    +        // ここでログイン処理。終わると勝手にリダイレクトする
    +    }
    +
    

    view에 로그인 버튼 추가

    views/site/login.php
     <div class="site-login">
         <h1><?= Html::encode($this->title) ?></h1>
    
    +    <?= yii\authclient\widgets\AuthChoice::widget([
    +            'baseAuthUrl' => ['site/auth']
    +        ]) ?>
    +
         <p>Please fill out the following fields to login:</p>
    

    이것만으로 표준 클라이언트라면 버튼까지 마음대로 내준다



    대단해! 혁명적인 작음이다!

    다만 간단한 것은 여기까지. 여러 수단으로 로그인시키려고 유저를 연결하거나 하면 여러 가지 신경을 쓰는 점도 나오므로 각각 노력해 주세요!

    좋은 웹페이지 즐겨찾기