从LoginController.php laravel登录时获取用户ID
我想在用户登录后立即获取用户id。 我已尝试使用请求获取用户id,但它不起作用。它将打印以下错误: 函数App\Http\Controllers\Auth\LoginController::redirectTo()的参数太少,在第15行的C:\Users\owden\Documents\generation\u system\vendor\laravel\framework\src\light\Foundation\Auth\RedirectsUsers.php中传递了0,预期正好是2 下面是我的LoginController.php从LoginController.php laravel登录时获取用户ID,php,laravel-5,laravel-5.8,Php,Laravel 5,Laravel 5.8,我想在用户登录后立即获取用户id。 我已尝试使用请求获取用户id,但它不起作用。它将打印以下错误: 函数App\Http\Controllers\Auth\LoginController::redirectTo()的参数太少,在第15行的C:\Users\owden\Documents\generation\u system\vendor\laravel\framework\src\light\Foundation\Auth\RedirectsUsers.php中传递了0,预期正好是2 下面是我
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected function redirectTo(Request $request, $id)
{
if(Auth::user()->usertype == 'admin')
{
return 'dashboard';
}
elseif(Auth::user()->usertype == 'organization') {
$user = User::find($id);
return redirect ('/profile/{'.$id.'}');
}else{
return 'approval';
}
}
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}
您不需要将
$id
传递到重定向到()
;您有Auth::user()
,因此可以从中获取id
:
protected function redirectTo()
{
$user = Auth::user();
if($user->usertype == 'admin')
{
return 'dashboard';
} else if($user->usertype == 'organization') {
return '/profile/'.$user->id.'/edit';
} else {
return 'approval';
}
}
更改摘要:
redirectTo()
函数中删除了Request$Request
和$id
$user
设置为Auth::user()
,这样就不必多次调用它User::find($id)如果您已经有了Auth::user()
usertype==“组织”
,则调整返回;所有其他的检查都返回一个字符串,所以这个检查也应该返回{}
是占位符,表示路由文件中的URL参数;实际上不包括它们。另外,对于/profile/{user}
,您没有GET
路由,只有一个用于/profile/{user}/edit
,所以使用它如您所见,
Auth::user()
包含用户信息,因此您不需要传递$id
,也不需要查询user::find($id)代码>谢谢,现在它可以选择用户id,但我收到另一个错误。“此路由不支持GET方法。支持的方法:修补程序”。我应该用“补丁”替换“获取”,你有两条不同的路径/profile/{user}/edit
和/profile/{user}
;一个是GET
,一个是PATCH
。您需要重定向到GET
one(如我的回答中所示),但您可以将补丁
保留为任何表单提交的补丁。
protected function redirectTo()
{
$user = Auth::user();
if($user->usertype == 'admin')
{
return 'dashboard';
} else if($user->usertype == 'organization') {
return '/profile/'.$user->id.'/edit';
} else {
return 'approval';
}
}