Laravel 5如何检查用户是否已登录?

36

我刚开始接触 Laravel 5,并且正在尝试理解它的 Auth 过程。我想防止用户在未登录的情况下访问我的某些页面。尝试使用 Route:filter,但它不起作用。我做错了什么?

Route::filter('/pages/mainpage', function()
{
    if(!Auth::check()) 
    {
        return Redirect::action('PagesController@index');
    }
});
7个回答

36

32

您应该使用auth中间件。只需在您的路由中像这样添加它:

Route::get('pages/mainpage', ['middleware' => 'auth', 'uses' => 'FooController@index']);

或者在您的控制器构造函数中:

public function __construct(){
    $this->middleware('auth');
}

出现错误:未找到视图[app]。(视图:C:\xampp\htdocs\AutoQlik\resources\views\auth\login.blade.php) - Tartar
1
那么你要么必须创建该视图,要么更改 app/Http/Middleware/Authenticate.php 中的重定向。 - lukasgeiter
如果我需要对我的网站上的任何URL进行身份验证中间件过滤,应该怎么办? - mercury
1
@HosMercury 你可以将路由包装在一个组中,并将中间件应用于该组。 - lukasgeiter

24

您可以通过以下方式直接在Blade代码中执行此操作

@if (!Auth::guest())
        do this 
@else
        do that
@endif


1
新的方式是 @auth@endauth https://laravel.com/docs/7.x/blade#if-statements 但无论如何加1 - Ryan

11

您可以在控制器中使用 中间件

  1. 控制器中的所有操作都需要登录
public function __construct()
{
    $this->middleware('auth');
}

您可以亲自实践一下,也可以查看其运行情况。
public function create()
{
    if (Auth::user()) {   // Check is user logged in
        $example= "example";
        return View('novosti.create')->with('example', $example);
    } else {
        return "You can't access here!";
    }
}

此外,您也可以在路由上使用它。
Route::get('example/index', ['middleware' => 'auth', 'uses' => 'example@index']);

11

在 Laravel 中,您可以在 Blade 模板中检查用户是否已登录或未登录。 在页面 Blade 中使用以下代码:

@auth

    // The user is login...

@endauth


@guest

    // The user is not login...

@endguest

3
如果您希望为单个路由使用身份验证中间件,则:
// Single route

Route::get("/awesome/sauce", "AwesomeController@sauce", ['middleware' => 'auth']);

如果您想在多个路由上使用身份验证中间件,则可以使用以下方法:
// Route group

Route::group(['middleware' => 'auth'], function() {
// lots of routes that require auth middleware
});

0

你也可以执行以下操作

@guest

//在此处输入您希望让访客看到的内容

@else

//在此处输入仅供特权用户使用的内容

@endguest

@guest
//Guest area
@else
//Privileged area
@endguest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接