中间件('auth')不保护页面

时间:2019-02-06 07:15:26

标签: laravel laravel-5

我创建了一个帖子创建页面,该页面仅对使用以下控制器代码的登录用户可用

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\StorePost ;
use App\Post;

class PostController extends Controller
{
public function __construst(){
    $this->middleware('auth');
}
//
public function index()
{
    # code...
    $posts = Post::latest()->get();
    return view('posts.index',compact('posts'));
}
public function show(Post $post)
{
    # code...
    return view('posts.show',compact('post'));
}
public function create()
{
    # code...
    return view('posts.create');
}
public function store(StorePost $request)
{
    # code...
    $validated = $request->validated();
    Post::create(request(['title','body']));
    return redirect('/');
}
}

web.php文件

<?php
 Route::get('/','PostController@index')->name('home');
 Route::get('/posts/create','PostController@create');
 Route::post('/posts','PostController@store');
 Route::get('/posts/{post}','PostController@show');
 Route::get('/tasks','TasksController@index');
 Route::get('/tasks/{tasks}', 'TasksController@show'); 
 Route::post('/posts/{post}/comment','CommentController@store');
 Route::get('/register','RegistrationsController@create');
 Route::post('/register','RegistrationsController@store');
 Route::get('/login','SessionsController@create');
 Route::get('/logout','SessionsController@destroy');

我面临的问题是任何人都可以访问帖子创建页面,

1 个答案:

答案 0 :(得分:1)

如@Mozammil所述,名为__construst()的函数不是构造函数。它只是一个名为__construst的函数。中间件在控制器中的工作方式是这样的,您必须将中间件添加到构造函数中,该构造函数是一种特定类型的函数,必须命名为__construct

如果您使用其他名称命名,则在创建对象时将不会调用它,并且永远不会执行中间件。