// 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
字段中
答案 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文档中所述,大多数情况下,建议使用中间件并重定向到其他控制器。