首页 > 解决方案 > 从 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');

标签: phplaravel-5laravel-5.8

解决方案


您不需要传递$idredirectTo(); 你有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';
    }
}

变更摘要:

  1. 从功能中移除Request $request和移除$idredirectTo()
  2. 设置$userAuth::user()这样您就不必多次调用它。
  3. 删除了查询User::find($id);,如果您已经有,那就是多余的Auth::user()
  4. 调整后的回报如果usertype == 'organization';所有其他检查都返回一个字符串,因此这个检查也应该返回。
  5. 固定的 URL 被返回。{'.$user->id.'}'是错的。are 占位符表示路由文件中的{}URL 参数;实际上不包括它们。此外,您没有GET路线/profile/{user},只有一条路线/profile/{user}/edit,因此请使用它。

可以看到,Auth::user()包含用户信息,所以不需要通过$id,也不需要查询User::find($id);


推荐阅读