我们可以在具有相同控制器和相同视图的laravel中为经过身份验证和未经身份验证的用户使用相同的路由吗?

时间:2019-07-30 12:22:16

标签: php laravel laravel-5

// route which should be used by authenticated and unauthenticated user 
Route::get('user/send-parcel', 'User\SenderController@sendParcerl');

我试图在网络(此auth中间件之外)中添加此路由。它工作正常,但如果用户未登录,user_id字段中应包含NULL的值,但在我的控制器中,我必须添加用户ID。

$user = Auth::user();
$parcel->user_id = isset($user) ? $user->id : NULL;

主要问题是,如果我将路由放置在Auth中间件之外,那么它将无法在我的控制器中获得Auth。因此该代码对于未经身份验证的用户可以正常工作,但对于经过身份验证的用户,它也可以将NULL放在user_id字段中

1 个答案:

答案 0 :(得分:0)

简单的回答是,可以。

它的工作原理,如果您查看以下页面:https://laravel.com/docs/5.8/authentication#authentication-quickstart

您将看到一个部分,说明如何检查用户是否已登录。

确定当前用户是否已通过身份验证

要确定用户是否已经登录到您的应用程序,可以在Auth外观上使用check方法,如果用户通过了身份验证,该方法将返回true:

    use Illuminate\Support\Facades\Auth;

    if (Auth::check()) {
        // The user is logged in...
    }

因此,在您的控制器中,添加Auth外观后,您可以执行以下操作:

if (Auth::check()) {
    // do something with an authenticated user
} else {
   // do something with a non-authenticated user
}
// shared code between all kind of users

如Laravel文档中所述,大多数情况下,建议使用中间件并重定向到其他控制器。