親記事
Laravel 5.7で基本的なCRUDを作る - Qiita
認証の機能を一括して導入する
readouble.com: 認証
以前の記事で下記を既に実行している場合は不要です。
> php artisan make:auth
上のコマンドで以下のことが起こります。
-
resources/views/home.blade.php
生成 -
resources/views/auth/
内に複数のビューを生成 -
resources/views/layouts/app.blade.php
生成 -
app/Http/Controllers/HomeController.php
生成 -
app/Http/Controllers/Auth/
内に複数のコントローラを生成 -
routes/web.php
内にルートを追加
ビューを修正する
生成したビューはほぼそのままで使えるのですが、レイアウトの指定などの細かな修正が必要です。
下記のリンク先の内容に丸ごと入れ替えてください。
コントローラを修正する
readouble.com: パスのカスタマイズ
ログインした後は/home
ではなくトップページ(/
)にリダイレクトするようにします。
下記のLoginコントローラだけでなく、Register、ResetPassword、Verificationコントローラでも同様に修正してください。
- protected $redirectTo = '/home';
+ protected $redirectTo = '/';
また、RedirectIfAuthenticatedミドルウェアも修正が必要です。
これを忘れてログインした状態で/login
へアクセスすると、/home
へリダイレクトしてしまいます。
404.blade.php page user logged in issue
if (Auth::guard($guard)->check()) {
- return redirect('/home');
+ return redirect('/');
}
以上で、ユーザー登録とログイン・ログアウトができるようになりました。
ユーザー登録で入力したメールアドレスへの確認用のメール送信や、パスワード再設定用のメール送信はまだできません。
なお、レイアウトにmy.blade.php
を指定しているはずなのにヘッダーが黒くならない場合は、php artisan view:clear
のコマンドでキャッシュを削除してみてください。
キャッシュや古いデータを削除したい
記事の投稿、編集、削除は認証を必須とする
readouble.com: コントローラーミドルウェア
UserControllerとPostControllerに__construct()
メソッドを追加します。
ログインしなくても閲覧だけはできるように、except()
で指定します。
class PostController extends Controller
{
/**
* 各アクションの前に実行させるミドルウェア
*/
public function __construct()
{
$this->middleware('auth')->except(['index', 'show']);
}
これで、ログアウトした状態でNew Post
をクリックすると、記事の投稿の前にまずはログインするように促されます。
記事作成時に著者のIDを保存する
以前の記事でpostsとusersテーブルを関連させた時は、ログイン機能がなかったので著者のIDを1で固定して保存するようにしていました。
これを修正します。
readouble.com: 認証済みユーザーの取得
public function store(StorePost $request)
{
$post = new Post;
$post->title = $request->title;
$post->body = $request->body;
+ $post->user_id = $request->user()->id;
$post->save();
return redirect('posts/'.$post->id);
}