在Laravel 5.4模型中访问经过身份验证的用户

时间:2018-06-25 10:02:06

标签: laravel eloquent

我正在构建一个具有定价的应用程序。我想为某些特定用户分配一些特殊的价格。 在具有价格的模型中,我试图使用访问器来“调整”价格,如下所示:

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;
}

}

2 个答案:

答案 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();