从LoginController.php laravel登录时获取用户ID

从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 下面是我

我想在用户登录后立即获取用户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

<?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<代码>{.$user->id.}'完全错误。
    {}
    是占位符,表示路由文件中的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';
        }
    }