Php 拉威尔:试图获得财产';id';Auth::User()的非对象类型->;身份证件
我有以下登录控制器:Php 拉威尔:试图获得财产';id';Auth::User()的非对象类型->;身份证件,php,laravel,Php,Laravel,我有以下登录控制器: public function userLogin(Request $request) { $rules = [ 'email' => 'required|exists:users', 'password' => 'required' ]; $request->validate($rules); $data = [ 'email' => $request->ge
public function userLogin(Request $request) {
$rules = [
'email' => 'required|exists:users',
'password' => 'required'
];
$request->validate($rules);
$data = [
'email' => $request->get('email'),
'password' => $request->get('password'),
];
if(Auth::attempt($data))
{
$user = Auth::User();
$userid = Auth::User()->id;
return response()->json([
'user' => $user,
'token' => $user->createToken('yourAppName')->accessToken ,
$userid
]);
}
else
{
return response()->json('Unauthorized', 401);
}
}
Myweb.php
(令牌由Laravel Passport生成)
出于某种原因,在使用邮递员测试我的
logincontroller
时,我实际上收到了Auth::User()->id
的值。但是在web.php
中,我收到试图获取非对象的属性“id”
。有什么想法吗?找出你为什么不被认为是认证的用户。我猜当您使用Postman时,您会在请求头中发送身份验证令牌。当您直接点击浏览器中的地址时,这是不可能的。您可以将Auth::User()->id
替换为Auth::User()->id
可能是大写字母引起了问题。这里有一个解决方案
您可以在db中找到该用户,并使用您拥有的电子邮件和密码获取其id
然后使用LoginUsingId($id)登录您的用户不,很抱歉它不起作用。函数/方法在PHP中不区分大小写,但我同意OP应该遵循约定并使用Auth::user()为了一致性/可读性,我只在邮递员中传递
电子邮件
和密码
。你是对的,我没有被认为是经过身份验证的。我在我的控制器中用if(Auth::check()){return response()->json(['Passed']);}else{return response()->json('Error',401);}
进行了检查,发现了错误。但我不知道为什么。我使用的是React to login btw,而不是默认的Laravel登录。您是否尝试将代码移动到api.php
而不是web.php
?API和web会话不共享
Route::get('/customize/{id}', function ($id) {
if (
User::where('id', Auth::User()->id)->whereHas('profile', function ($query) use ($id) {
return $query->where('id', $id);
})
->exists()
) {
return view( 'welcome' );
}
return "no";
});