我正在嘗試使用標準的 Laravelauth相關功能。我有標準的登錄、注冊、注銷等......作業正常。但我的問題是,每當我使用這樣的函式時,都會Auth::user()回傳GenericUser模型而不是我自己的App/Models/User.php模型。問題是我的用戶模型對其他資料有一些外鍵參考,所以我想專門使用我的User模型。
例如,當Policy我嘗試做一個時,我遇到了一個錯誤:
傳遞給 App\Policies\ContractPolicy::before() 的引數 1 必須是 App\Models\User 的實體,給定的 Illuminate\Auth\GenericUser 的實體
代碼看起來像這樣:
<?php
namespace App\Policies;
use App\Models\Contract;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class ContractPolicy
{
use HandlesAuthorization;
public function before(User $user, $ability)
{
if ($user->isSuperAdmin()) {
return true;
}
}
public function viewAny(User $user)
{
return $user->isMember();
}
}
該GenericUser模型確實從users表中回傳資料,但問題是它與我的User模型給出的完全不同,因此不包括我添加的外鍵參考或函式。我的印象是我可以通過切換config/auth.php提供者來切換使用的模型。我做了什么,似乎沒有任何改變:
'providers' => [
'users' => [
'model' => App\Models\User::class,
],
'users' => [
'driver' => 'database',
'table' => 'users',
],
],
我在這里做錯了什么?
uj5u.com熱心網友回復:
您正在定義users提供程式以使用“資料庫”驅動程式:
'users' => [
'driver' => 'database',
'table' => 'users',
],
調整它以使用“雄辯”的驅動程式:
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'database' 驅動程式使用 Query Builder 與資料庫表進行互動并回傳一個物件GenericUser來表示當前經過身份驗證的用戶。
'eloquent' 驅動程式使用 Eloquent 模型與資料庫互動并回傳一個模型實體。如果你喜歡 Eloquent 的人際關系和所有其他特性,那么你應該堅持使用“eloquent”驅動程式。此外,您已將 Policy 方法定義為期望將特定模型傳遞給其方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/406303.html
標籤:
上一篇:Laravel7-臨時用戶
