我正在构建一个具有定价的应用程序。我想为某些特定用户分配一些特殊的价格。 在具有价格的模型中,我试图使用访问器来“调整”价格,如下所示:
public function getPriceAttribute($price)
{
dd(auth()->user()); //this returns null
if (auth()->check()) {
$user = auth()->user();
return $user->aDefinedRelationship()->first()->price;
}
return $price;
}
然而,auth()->user()
始终返回null
。
我使用的是传统的Laravel身份验证,没有外部库。
请问我有没有做对的事情?
任何帮助将不胜感激。
更多信息:
auth.php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Api\V1\Models\User::class,
],
],
];
ThePriceModel.php
namespace App\Api\V1\Models;
use Illuminate\Database\Eloquent\Model;
class ThePriceModel extends Model
{
protected $table = 'prices';
protected $fillable = ['code', 'price'];
public function getPriceAttribute($price)
{
dd(auth()->user()); //this returns null
if (auth()->check()) {
$user = auth()->user();
return $user->aDefinedRelationship()->first()->price;
}
return $price;
}
}
答案 0 :(得分:0)
每件事都失败之后,我求助于使用全局配置变量。
在config/constants.php
中:
return [
...
'user' => []
];
在我控制器的某处:
config()->set('constants.user', auth()->user());
然后在模型中:
...
public function getPriceAttribute($price)
{
$user = config()->get('constants.user');
...
}
答案 1 :(得分:0)
我想您正在使用API,这就是为什么它不起作用的原因。您可以使用此检查用户。您需要检查API保护。
$user = \Auth::user() ?? \Auth::guard("api")->user();