为什么Laravel Auth Facade在控制器中不起作用?

时间:2019-05-08 02:22:10

标签: php laravel laravel-authorization laravel-facade

我有一个控制器,该控制器带有从Vue组件调用的store()方法。它可以正常工作,因为我可以成功地将数据从Vue组件传递到控制器。但是,我试图获取经过身份验证的用户的身份,由于某种原因,我无法在controller方法内部执行此操作。我当前正在做的事情是检查是否有经过身份验证的用户(应该有经过身份验证的用户,应该设置auth,并且在检查刀片模板auth()->check()的前端时返回true)。

控制器

public function store(Request $request)
{
    $player = Player::create([
        'first_name' => $request['first_name'],
        'last_name' => $request['last_name'],
        'dob' => $request['dob'],
    ]);

    If (auth()->check()) {
        Mail::to(auth()->user())->send(new PlayerCreated($player));
    }
}

我也正在导入Illuminate\Support\Facades\Auth,,所以不使用Auth门面不是问题。但是,由于某种原因,它无法正常工作。

我想知道这是否与API路由有关?我似乎无法弄清楚为什么我仍然无法访问控制器中经过身份验证的用户。关于为什么发生这种情况以及如何解决的任何想法?

3 个答案:

答案 0 :(得分:0)

确保您正在这条路线上加载“网络”中间件!

Route::group(['namespace' => 'Your namespace', 'middleware' => ['web']], function () {
    // your routes
});

答案 1 :(得分:0)

app/config.php中,检查用于身份验证的驱动程序。您似乎正在尝试调用Auth Facade以使用API​​控制器方法获取用户。

相反,您必须解析与授权标头一起发送的令牌,以获取经过身份验证的用户。这取决于您的api身份验证驱动程序。

例如,在JWT中,您可以使用户通过:

$user = JWTAuth::parseToken()->authenticate()

或者您可以尝试

$user = Auth::guard('api')->user();

答案 2 :(得分:-1)

在您的控制器中,添加控制器文件顶部

use Auth;

然后您可以使用

之类的身份验证使用电子邮件
$email = Auth::user()->email;

我假设您正在使用laravel5.5