Laravel 5 の基礎 (12) - 認定

WBOY
WBOYオリジナル
2016-06-13 12:17:29946ブラウズ

Laravel 5 の基本 (12) - 認証

Laravel にはユーザー認証システムが付属しています。routes.php を削除する場合は、

<code>Route::controllers([    'auth' => 'Auth\AuthController',    'password' => 'Auth\PasswordController']);</code>

を追加してください。 php artisan route:list を使用して確認してください。ブラウザで /auth/login にアクセスすると、ログイン インターフェースが表示されます。システムのデフォルト app.blade.php にある Google に関する項目をコメントアウトするのが最善です。そうしないと、おかしくなります。

登録、ログインを使用したり、パスワードを忘れたりすることもできます。

実際には送信後にユーザーの登録が失敗しましたが、larave は自動的に /home にジャンプしました。 tinker を使用すると、ユーザーが作成されたかどうかを確認できます。

は実際に AuthAuthControllertrait を使用していますが、トライアトとは何ですか? PHP は単一継承のみをサポートしており、トレイトは PHP5.4 で追加されました。トレイトは実際にはメソッドのセットをカプセル化したもので、別のクラスに含めることができます。抽象クラスと同様に、直接インスタンス化することはできません。

AuthAuthController には特性への参照があります:

<code>use AuthenticatesAndRegistersUsers;</code>

それを見つけて、登録後にどのようにジャンプするかを見てみましょう。 vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesAndregistersUsers.phpの中にかなり深く隠してるんですね、すごい。

<code>	public function redirectPath()	{		if (property_exists($this, &#39;redirectPath&#39;))		{			return $this->redirectPath;		}                //如果用户设置了 redirectTo 属性,则跳转到用户设置的属性,否则到home		return property_exists($this, &#39;redirectTo&#39;) ? $this->redirectTo : &#39;/home&#39;;	}</code>

OK、登録後にジャンプをカスタマイズするには、redirectTo 属性を設定するだけです。 AuthAuthContotroller を変更します:

<code> protected $redirectTo = &#39;articles&#39;;</code>

最初に /auth/logout を使用して確実に終了します。何か問題が発生しても心配しないでください。デフォルトのホームページはありません。再確認してください: auth/register 新しいユーザーを作成します。今回はこれでOKです。

再度ログアウトし、ログインを使用してログインします。

ここで、form_partial に設定された一時的な非表示フィールドを削除し、コントローラーを変更します。

<code>    public function store(Requests\ArticleRequest $request) {        //你可以这样        //$request = $request->all();        //$request[&#39;user_id&#39;] = Auth::id();        //更简单的方法        $article = Article::create($request->all());        //laravel 自动完成外键关联        Auth::user()->articles()->save($article);        return redirect(&#39;articles&#39;);    }</code>

記事を追加し、tinker を使用してチェックアウトします。

ミドルウェア

もちろん、少なくともログインする場合に限り、誰でも記事を公開できるようにすることは望ましくありません。コントローラーに保護を追加します。

<code>    public function create() {        if (Auth::guest()) {            return redirect(&#39;articles&#39;);        }        return view(&#39;articles.create&#39;);    }</code>

上記のコードは機能しますが、保護が必要なすべてのメソッドで上記の処理を実行する必要があります。これはあまりにも愚かです。ミドルウェア。

ミドルウェアは、パイプライン内の特定の瞬間に処理される処理パイプラインとして理解できます。この瞬間はリクエストまたはレスポンスになります。ミドルウェアの処理ルールによっては、リクエストがリダイレクトされたり、渡されたりする場合があります。

には、app/http/middleware 内に 3 つのミドルウェアが含まれています。詳しく見てみると、Closure $next が次のミドルウェアを表しています。

app/http/kernel.phpにミドルウェアを登録します。 $middleware セクションはすべての http を処理するミドルウェアを宣言し、$routeMiddleware はルーティングのみを処理します。これらのミドルウェアの 1 つ以上を使用することを明示的に宣言する必要があります。

ArticlesController 全体を保護したいとします。コンストラクターにミドルウェアを直接追加します。

<code>    public function __construct() {        $this->middleware(&#39;auth&#39;);    }</code>

これで、すべてのメソッドが保護されます。

しかし、おそらくコントローラー全体を保護することは望ましくありません。そのメソッドの 1 つまたは 2 つだけを保護する場合はどうでしょうか?次のように処理できます:

<code>    public function __construct() {        $this->middleware(&#39;auth&#39;, [&#39;only&#39; => &#39;create&#39;]);        //当然可以反过来        //$this->middleware(&#39;auth&#39;, [&#39;except&#39; => &#39;index&#39;]);    }</code>

必ずしもコントローラーのコンストラクターにミドルウェアを導入する必要はありません。ルート内で直接宣言できます:

<code>Route::get(&#39;about&#39;, [&#39;middleware&#39; => &#39;auth&#39;, &#39;uses&#39; => &#39;[email&#160;protected]&#39;]);</code>

In kernel.php 'IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode' などの提供されたシステム ミドルウェアを使用すると、たとえば、システムはオンラインですが、処理のために一定期間一時的にシャットダウンする必要がある場合に、メンテナンス モードに入ることができます。コマンドラインを使用して、このミドルウェアの動作を確認してください。

<code>php artisan down</code>

Web サイトにアクセスすると、URL リクエストがすぐに返されることがわかります。オンラインのウェブサイト:

<code>php artisan up</code>

独自のミドルウェアを作成しましょう:

<code> php artisan make:middleware Demo</code>

次に、コードを追加します:

<code>	public function handle($request, Closure $next)	{        //如果请求中含有 foo,我们就回到控制器首页        if ($request->has(&#39;foo&#39;)) {            return redirect(&#39;articles&#39;);        }		return $next($request);	}</code>

すべてのリクエストで使用したい場合ミドルウェアは kernel.php$middleware に登録する必要があります:

<code>	protected $middleware = [		...		&#39;App\Http\Middleware\Demo&#39;,	];</code>

これでテストできるようになります。/articles/create?foo=bar にアクセスすると、ホームページにリダイレクトされます。

この表示ミドルウェアを廃止して、実際に役立つミドルウェアを作成しましょう。このページは管理者がアクセスできる必要があるとします。

<code>php artisan make:middleware RedirectIfNotAManager</code>

処理コードを追加しましょう:

<code>	public function handle($request, Closure $next)	{        if (!$request->user() || !$request->user()->isATeamManager()) {            return redirect(&#39;articles&#39;);        }		return $next($request);	}</code>

以下のモデルを変更します:

<code>    public function isATeamManager() {        return false;    }</code>

簡単にするために、直接 false を返します。今回は kernel.php 内にミドルウェアを $routeMiddleware 内に配置します。

<code>	protected $routeMiddleware = [		...		&#39;manager&#39; => &#39;App\Http\Middleware\RedirectIfNotAManager&#39;,	];</code>

テスト ルートを作成してテストしましょう:

<code>Route::get(&#39;foo&#39;, [&#39;middleware&#39; => &#39;manager&#39;, function() {    return &#39;This page may only be viewed by manager&#39;;}]);</code>

ゲスト ID アクセスまたはログイン ID アクセスはホームページに戻りますが、isATeamManager() を変更すると、 true に戻る、ログイン ID にアクセスして、返された情報を確認します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。