Open tobibako45 opened 4 years ago
の2つと、
Auth0でのアプリケーション登録
.envで
APP_URL=http://localhost:8000
とか
ができてることが前提
このプラグインをインストールするには
$ composer require auth0/login
これによりインストールされます:
Auth0 PHP SDKでvendor\auth0\auth0-php Auth0 Laravelプラグインでvendor\auth0\login
LaravelでAuth0ログインを有効にする
サービスプロバイダーに登録。
まず、Auth0サービスを以下のプロバイダーのリストに追加する必要があります。
config/app.php
'providers' => array(
// ...
Auth0\Login\LoginServiceProvider::class,
);
Auth0ファサードを使用する場合は、同じファイルにエイリアスを追加します(必須ではありません)
config/app.php
'aliases' => [
// ...
'Auth0' => Auth0\Login\Facade\Auth0::class,
];
最後に、ユーザーがログインするたび、またはJWTがデコードされるたびに、アプリのユーザーモデルを提供するクラスをバインドする必要があります。Auth0UserRepositoryこのパッケージで提供されているものを使用するか、独自のパッケージを作成できます(以下の「カスタムユーザー処理」セクションを参照)。
AppServiceProvider::register()メソッドに次を追加します。
app/Providers/AppServiceProvider.php
// ...
class AppServiceProvider extends ServiceProvider
{
// ...
public function register()
{
$this->app->bind(
\Auth0\Login\Contract\Auth0UserRepository::class,
\Auth0\Login\Repository\Auth0UserRepository::class
);
}
}
プラグインを構成するには、プラグイン構成を公開config/laravel-auth0.phpし、Auth0アカウントの情報と実装の詳細を使用してファイルを完成させる必要があります。
次のコマンドでデフォルトの構成ファイルを公開します。
php artisan vendor:publish
下記のようなメッセージが表示され、入力を求められます。
Which provider or tag's files would you like to publish?:
[0 ] Publish files from all providers and tags listed below
[1 ] Provider: Auth0\Login\LoginServiceProvider
[2 ] Provider: BeyondCode\DumpServer\DumpServerServiceProvider
[3 ] Provider: Fideloper\Proxy\TrustedProxyServiceProvider
[4 ] Provider: Illuminate\Foundation\Providers\FoundationServiceProvider
[5 ] Provider: Illuminate\Mail\MailServiceProvider
[6 ] Provider: Illuminate\Notifications\NotificationServiceProvider
[7 ] Provider: Illuminate\Pagination\PaginationServiceProvider
[8 ] Provider: Laravel\Tinker\TinkerServiceProvider
[9 ] Tag: config
[10] Tag: laravel-errors
[11] Tag: laravel-mail
[12] Tag: laravel-notifications
[13] Tag: laravel-pagination
>
Auth0\Login\LoginServiceProviderを選択するので、1を入力してEnter。
> 1
Publishing complete.と表示されればOKです。
Copied File [/vendor/auth0/login/src/config/config.php] To [/config/laravel-auth0.php]
Publishing complete.
.env
// ...
AUTH0_DOMAIN=<Auth0で取得したDomain>
AUTH0_CLIENT_ID=<Auth0で取得したClient_ID>
AUTH0_CLIENT_SECRET=<Auth0で取得したClient_Secret>
ではlaravel-auth0.php、グローバルヘルパーenv()を使用してこれらの値を取得し、Laravelアプリにロードします。
プラグインは、Auth0サーバーからの認証データを処理するコールバックルートを作成することにより、Laravel認証システムと連携します。
まず、ルートとコントローラーをに追加しますroutes/web.php。ここで使用されるルートは、redirect_uri以前に設定された構成オプションと一致する必要があります。
routes/web.php
// ...
Route::get( '/auth0/callback', '\Auth0\Login\Auth0Controller@callback' )->name( 'auth0-callback' );
ここでこのコールバックURLをロードすると、404エラーが表示されるのではなく、すぐにホームページにリダイレクトされます。これにより、ルートがセットアップされ、処理されていることがわかります。
次に、このURLを、このアプリで使用するアプリケーションの[アプリケーション設定]画面の[ 許可されたコールバックURL]フィールドに追加する必要があります
最後に、ユーザーがアプリにログインおよびログアウトする方法を設定する必要があります。 これは、 前者(ログイン)についてはユーザーをAuth0にリダイレクトし、 後者(ログアウト)についてはセッションデータを消去することで処理されます。
汎用ルート処理コントローラーを作成することから始めましょう。
php artisan make:controller Auth/Auth0IndexController
これにより、ログインとログアウトに使用されるルートを処理するコントローラーファイルが作成されます。作成したコントローラーで、これらのそれぞれに対して関数を作成しましょう。
app/Http/Controllers/Auth/Auth0IndexController.php
// ...
class Auth0IndexController extends Controller
{
/**
* Redirect to the Auth0 hosted login page
*
* @return mixed
*/
public function login()
{
$authorize_params = [
'scope' => 'openid profile email',
// Use the key below to get an access token for your API.
// 'audience' => config('laravel-auth0.api_identifier'),
];
return \App::make('auth0')->login(null, null, $authorize_params);
}
/**
* Log out of Auth0
*
* @return mixed
*/
public function logout()
{
\Auth::logout();
$logoutUrl = sprintf(
'https://%s/v2/logout?client_id=%s&returnTo=%s',
config('laravel-auth0.domain'),
config('laravel-auth0.client_id'),
url('/')
);
return \Redirect::intended($logoutUrl);
}
}
次に、適切なハンドラーメソッドに結び付けられたルートを、 使用可能な名前とauth必要なミドルウェアとともに追加します。
routes/web.php
// ...
Route::get( '/login', 'Auth\Auth0IndexController@login' )->name( 'login' );
Route::get( '/logout', 'Auth\Auth0IndexController@logout' )->name( 'logout' )->middleware('auth');
Laravelの認証システムが必要とユーザオブジェクトによって与えられたユーザプロバイダを。 これら2つの抽象化により、ユーザーエンティティは任意の構造を持つことができ、どこにでも保存できます。 でユーザープロバイダーを選択して、ユーザープロバイダーを間接的に構成しますconfig/auth.php。 デフォルトのプロバイダーはEloquentで、ORMを使用してデータベースにユーザーモデルを保持します。
プラグインには、Auth0によって定義されauth0た正規化ユーザープロファイルをラップするユーザー構造を定義する認証ドライバーが付属しています。 このドライバーは実際にユーザーを永続化するのではなく、将来の呼び出しのためにセッションに保存するだけです。 これは基本的なテストや、ユーザーを永続化する必要がない場合にうまく機能します。 データベースの永続性については、以下の「カスタムユーザー処理」セクションを参照してください。
いつでも呼び出しAuth::check()て、ログインしているユーザーがいるかどうかを確認Auth::user()し、ユーザー情報を含むラッパーを取得できます。
次のようconfig/auth.phpに使用するauth0ようにユーザードライバーを構成します。
config/auth.php
// ...
'providers' => [
'users' => [
'driver' => 'auth0'
],
],
これをすべてテストするには、これらのルートにアクセスするためのリンクをサイトに追加しましょう。 デフォルトのプロジェクトを使用している場合は、開いてブロックresources/views/welcome.blade.phpを探します@if (Route::has('login'))。 そのブロックを次のように変更します。
resources/views/welcome.blade.php
@if (Route::has('login'))
<div class="top-right links">
@auth
<a href="{{ route('logout') }}">Logout</a>
@else
<a href="{{ route('login') }}">Login/Signup</a>
@endauth
</div>
@endif
アプリのホームページをロードすると、右上にログインリンクが表示されます。 それをクリックすると、アプリケーションのAuth0ログインページにリダイレクトされます。 これが発生しない場合、次の2つのいずれかが表示されます。
Laravelデバッグ画面(はAPP_DEBUGに設定されていますtrue)は、上記の手順とともに、問題の診断に役立ちます 「技術的詳細」の見出しの下に詳細が記載されたAuth0エラーページ(このエラーの詳細を見るをクリックします) ログインに成功すると、ホームページにリダイレクトされ、右上にログアウトリンクが表示されます。 これにより、ログインプロセスが成功し、Auth0ユーザープロバイダーが適切に機能していることがわかります。[ ログアウト]をクリックすると、開始した場所に戻るはずです。
この時点で、Auth0を使用した完全に機能する認証プロセスが必要です。
Authファサードを下記のように使用することで、認証確認と認証済みユーザーの取得ができます。
Auth::check()
認証済みかどうかの確認
Auth::user()
認証済みユーザーの情報
今回はそれぞれの処理結果を出力するだけのコントローラーを作成します。
php artisan make:controller Auth0TestController
app/Http/Controllers/Auth0TestController.phpを下記のようにします。
class Auth0TestController extends Controller
{
public function authCheck()
{
echo \Auth::check();
}
public function authUser()
{
echo \Auth::user();
}
}
routes/web.phpに下記を追加します。
Route::get('/auth-check', 'Auth0TestController@authCheck' );
Route::get('/auth-user', 'Auth0TestController@authUser' );
jsonが返ってくる
public function getUser()
{
$userinfo = \App::make('auth0')->getUser();
echo json_encode($userinfo);
}
Auth0 PHP(Laravel)SDKクイックスタート:ログイン
auth0-laravel-php-web-app/01-Login at master · auth0-samples/auth0-laravel-php-web-app
config/laravel-auth0.phpの作成と設定 コレがわかりやすい
Auth0 を使ってユーザログインを実装する - Qiita
(https://auth0.com/docs/quickstart/webapp/laravel) Laravel 6.0の新機能