Laravel Sanctumによる認証


仕事中のこの週はNathescript、特にTypeScript、イオン、およびそこに投げられたネイティブに反応するVueフレーバーと一緒にめちゃくちゃ過ごしていました.それは、ちょうど異なる環境が起きて、局所的に動くことさえ、むしろイライラしていました.私は、それがモバイルエンジニアであるために特別な種類の人を連れて行くということを常に知っていました、そして、今週は私にそれを証明しました.そして、もしあなたが本当のネイティブエンジニアならば、私はあなたが私より良い人だと言わなければならない.我々は会社として我々の現在のスタッフと我々は我々のAPIとの対話には非常にシンプルなアプリをしたいという事実を決定している、NativeScript Vueは私たちのためのマークのすべてをヒット.
私は間違いなく、このプロジェクトについての詳細はさらに多くのつもりだと私たちは週1週間このアプリを構築しようとしているの要約があります.しかし、今週は多くの障害がありました、しかし、定数が1つのものが我々が使うどんな言語であっても、我々のAPIと対話するためにそれを必要としています、そして、我々は適所に若干の方法を必要とします.なぜ神聖なのか?我々のニーズのためによく、それはパスポートが少しoverkillであるようです、そして、はい、我々はJWT/FireBase認証をしたかもしれません、あるいは、あなたは家でカスタムAuthセットアップを構築することができます.すべてが有効なオプションですが、我々はSanctumの小さなフットプリントを決めた.あなたがパスポートをインストールしたならば、それはスーパー類似です、そして、あなたはどんな問題も持ってはいけません.Authを決してしない誰のためにでも、このポストはあなたのためです.いくつかのステップが言及することを忘れているが、いくつかのエラーが自分自身を提示するときに実際の迅速な覚えている前に何かを設定している場合.
そしてSanctum ドキュメント.簡単にインストール手順に従ってくださいcomposer require laravel/sanctum php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" 設定ファイルを発行して、最後にphp artisan migrate 新しいStattumテーブルを移動します.一般的に言えば、あなたはUser モデルと名前空間をもたらすuse Laravel\Sanctum\HasApiTokens; そして、特徴を加えるようにしてくださいuse HasApiTokens .
それで、我々はかなりセットアップされて、ちょうどルート/コントローラを作成しなければなりません、そして、いくつかのより少しのニックスとNacksをするために、すべてを正しく走らせて、走らせなければなりません.だからweb.php ファイルは、あなたのルート設定がどのように設定されているかによって異なります/tokens/create そして、私は新しく作成されたAuthController@login . 私は、新しく作成されたコントローラの機能を呼ぶべきかについて議論しました私はCLIを使用してファイルを作成し、私の他のコントローラと固定の名前空間のいずれかをコピー/貼り付けました.ウェブファイルのすべてのWebミドルウェアが存在しているので、よく郵便局/ブラウザで今存在していないものは:CSRFトークンです.それで、我々は開く必要がありますVerifyCsrfToken.php そして、私のケースで、最近作成されたルートを加えてください/tokens/create を指定します.
私のログイン機能では、DB値に対してメール/パスワードをチェックする必要があります.彼らが本当に正しいならば、私はトークンを返します.いいえ、本当のために.通常はWebアプリケーションには、ログインにリダイレクトするが、これはすべてのモバイルアプリケーションのためであり、私はそのシナリオの流れの100 %ではない.私は次の数週間でその橋を渡ります、そして、あなたはそこでそれについての話があることを賭けることができます.
    public function login(Request $request)
    {
        $user = User::where('email', $request->email)->first();

        if (! $user || ! Hash::check($request->password, $user->password)) {
            throw ValidationException::withMessages([
                'email' => ['The provided credentials are incorrect.'],
            ]);
        }

        return $user->createToken($request->device_name)->plainTextToken;
    }
それで、私が行ったルートは、あなたが使うことができますAuth::attempt これは電子メール/パスワードを取得し、これはちょうど私が行った特定の方法ですブールを返します.したがって、最初に渡された電子メールは私たちのdbではスローされませんし、例外ではなく、エラーメッセージを返します.パスワードとパスワードを渡された場合(ハッシュファサードを使用して、我々は定期的にチェックすることはできません覚えている)場合は、現在のユーザー(メールで渡された)に一致しないでください.それで、すべてがよいならば、我々はトークンを返します.結局、私はこれを素晴らしいAPI資源にするつもりです、しかし、現在、我々はちょうど基礎がインストールされることを確認しています.それで、郵便配達人の経路をあなたが知っている電子メール/パスワードで打ってください、そして、あなたはリターンでこれのような何かを得なければなりません:5|eOMh3OFK4u21rx6Ggqj4QXCzSQnwvO0lpB47baK1 そして、credsがあなたにマッチしないならば、我々のホームページは帰りました.もう一度私はこれのすべてをカスタマイズする必要がありますが、今のところ私は、トークンを取得し、そのトークンを使用してルートをヒットし、それが良いことを確認して適切なcredを確認したい.
Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});
これは、トークンをテストするための素晴らしい方法であり、それは私の最初のルートですapi.php ファイルと再びこれはあなたのルートがどのようにセットアップによって異なるかもしれません.だから今、私たちは世話をするもう一つのものを持っています、そして、それはAPIドライバを「認可」に設定することですauth.php 設定ファイル.その後、一般的に我々はプロバイダを設定するusers それ以来、私は特徴を加えましたHasApiTokens .
最後に最後に、私は新たに作成したトークンをAuthヘッダに郵便配達人のトークンとして追加し、ルートを使ってトークンが有効かどうかをチェックします./api/user そして、トークンが有効な場合、トークンが作成されたユーザを返す必要があります.トークンが無効な場合、ログインページが返されます.再び私は物事の流れを理解する必要がありますが、実際に私の新しい認証システムが実際に動作していることを確認することができます.つのことを確認するには、いつでも実行する必要がある設定ファイルへの変更を行うことですphp artisan config:cache or php artisan config:clear したがって、これらの新しい設定値はキャッシュされます.それで、それが今週のために本当にそれである、そして、あなたがラパスのためにパスポートまたはJWT認証システムの他のタイプをセットしたならば、これは多分あなたがどれくらいの長さを知っているかについて、あなたが読んだ最悪のもののうちの1つでした.来週まで.