php - 从 LoginController.php laravel 登录时获取用户 ID
问题描述
我想在用户登录后立即获取用户 ID。我尝试使用 request 获取用户 ID,但它不起作用。它打印以下错误:
“函数 App\Http\Controllers\Auth\LoginController::redirectTo() 的参数太少,在 C:\Users\owden\Documents\donation_system\vendor\laravel\framework\src\Illuminate\Foundation\Auth\RedirectsUsers 中传递了 0 .php 在第 15 行,预计正好 2 个”
下面是我的 LoginController.php。
<?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');
}
}
和路线:
Route::get('/profile', 'ProfilesController@index')->name('profile.show');
Route::get('/profile/{user}/edit', 'ProfilesController@edit')->name('profile.edit');
Route::patch('/profile/{user}', 'ProfilesController@update')->name('profile.update');
解决方案
您不需要传递$id
给redirectTo()
; 你有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';
}
}
变更摘要:
- 从功能中移除
Request $request
和移除$id
redirectTo()
- 设置
$user
为Auth::user()
这样您就不必多次调用它。 - 删除了查询
User::find($id);
,如果您已经有,那就是多余的Auth::user()
- 调整后的回报如果
usertype == 'organization'
;所有其他检查都返回一个字符串,因此这个检查也应该返回。 - 固定的 URL 被返回。
{'.$user->id.'}'
是错的。are 占位符表示路由文件中的{}
URL 参数;实际上不包括它们。此外,您没有GET
路线/profile/{user}
,只有一条路线/profile/{user}/edit
,因此请使用它。
可以看到,Auth::user()
包含用户信息,所以不需要通过$id
,也不需要查询User::find($id);
推荐阅读
- python - 在不使用 input() 的情况下在 python 中等待的有效方法?
- python - Function(params...)(params) 在 python 中做了什么?
- sql - 在 teradata 选择的非聚合值上使用分区分析函数的聚合函数必须是关联组的一部分
- c++ - Visual Studio 2017 的 CMake 工具卡住解析
- windows - 当使用 windows 标头模拟输入事件时,它会停止程序,直到手动给出中断
- python - 大尺寸输入的Tensorflow Estimator Graph Size Limitation
- reactjs - 哪个是处理 React JSX 的合适加载器?
- excel - VBA:替换 * 或 & 等字符
- html - 如何在输入字段的 vlaue 中加载 font-awesome 图标
- awk - 匹配模式后仅打印下一行的一部分