エクステンションをインストールするためには、Composer を使います。次のコマンドを実行します。
composer require --prefer-dist yiisoft/yii2-authclient "*"
または、あなたの composer.json の require
セクションに次の行を追加します。
"yiisoft/yii2-authclient": "*"
エクステンションがインストールされた後に、認証クライアントコレクションのアプリケーションコンポーネントをセットアップする必要があります。
'components' => [
'authClientCollection' => [
'class' => 'yii\authclient\Collection',
'clients' => [
'google' => [
'class' => 'yii\authclient\clients\GoogleOpenId'
],
'facebook' => [
'class' => 'yii\authclient\clients\Facebook',
'clientId' => 'facebook_client_id',
'clientSecret' => 'facebook_client_secret',
],
// etc.
],
]
...
]
特別な設定なしに使用できる次のクライアントが提供されています。
それぞれのクライアントの構成は少しずつ異なります。 OAuth では、使おうとしているサービスからクライアント ID と秘密キーを取得することが必要です。 OpenID では、たいていの場合、何も設定しなくても動作します。
外部サービスによって認証されたユーザを認識するために、最初の認証のときに提供された ID を保存し、以後の認証のときにはそれをチェックする必要があります。 ログインのオプションを外部サービスに限定するのは良いアイデアではありません。 外部サービスによる認証が失敗して、ユーザがログインする方法がなくなるかもしれないからです。 そんなことはせずに、外部認証と昔ながらのパスワードによるログインの両方を提供する方が適切です。
ユーザの情報をデータベースに保存しようとする場合、スキーマは次のようなものになります。
class m??????_??????_auth extends \yii\db\Migration
{
public function up()
{
$this->createTable('user', [
'id' => $this->primaryKey(),
'username' => $this->string()->notNull(),
'auth_key' => $this->string()->notNull(),
'password_hash' => $this->string()->notNull(),
'password_reset_token' => $this->string()->notNull(),
'email' => $this->string()->notNull(),
'status' => $this->smallInteger()->notNull()->defaultValue(10),
'created_at' => $this->integer()->notNull(),
'updated_at' => $this->integer()->notNull(),
]);
$this->createTable('auth', [
'id' => $this->primaryKey(),
'user_id' => $this->integer()->notNull(),
'source' => $this->string()->notNull(),
'source_id' => $this->string()->notNull(),
]);
$this->addForeignKey('fk-auth-user_id-user-id', 'auth', 'user_id', 'user', 'id', 'CASCADE', 'CASCADE');
}
public function down()
{
$this->dropTable('auth');
$this->dropTable('user');
}
}
上記の SQL における user
は、アドバンストプロジェクトテンプレートでユーザ情報を保存するために使われている標準的なテーブルです。
全てのユーザはそれぞれ複数の外部サービスを使って認証できますので、全ての user
レコードはそれぞれ複数の auth
レコードと関連を持ち得ます。
auth
テーブルにおいて source
は使用される認証プロバイダの名前であり、source_id
はログイン成功後に外部サービスから提供される一意のユーザ識別子です。
上記で作成されたテーブルを使って Auth
モデルを生成することが出来ます。これ以上の修正は必要ありません。