【问题标题】:Multi provider relational user table in laravellaravel 中的多提供者关系用户表
【发布时间】:2020-06-03 00:14:00
【问题描述】:

我是 laravel 的新手,正在尝试创建一个身份验证系统,用户可以在其中使用多个提供商登录/注册,并且每当用户使用任何提供商登录时,都必须相应地显示用户头像和个人资料数据。当使用Auth::user()->providers 时,结果是该用户的所有注册提供者的数组。

我想要的是仅获取当前登录方法的提供者数据(即本地帐户、Facebook 帐户提供者、谷歌帐户提供者等),以便我可以为用户显示来自该确切提供者的数据。

用户.php

...
    public function providers()
    {
        return $this->hasMany("App\UserProvider");
    }
...

UserProvider.php

class UserProvider Extends Model
{
    protected $table = 'user_providers';
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'user_id', 'provider', 'provider_id','avatar_url', 'token', 'token_secret',
    ];

}

请让我知道我的方法是否正确或是否有其他方法可以做到这一点。 谢谢!

【问题讨论】:

    标签: php mysql laravel eloquent model


    【解决方案1】:

    您可以使用您的关系来构建查询

    $provider = Auth::user()->providers()->where('provider', 'facebook')->first();
    

    这将返回单个 UserProvider 类对象

    【讨论】:

      【解决方案2】:

      您还可以在user_providers 表中包含一个布尔列,以了解最后使用哪个提供程序(因此这将是当前的登录方法)。让我们将此专栏称为is_current

      因此,当用户访问系统时,您更新登录方法,将此字段设置为true。您可以通过覆盖app\Http\Controllers\LoginController 控制器的authenticated() 方法来做到这一点:

      # app\Http\Controllers\LoginController.php
      
      protected function authenticated(Request $request, $user)
      {
          Auth::user()
                ->providers()
                ->where('provider', $request->provider) // Change this to make it work
                ->update('is_current', true);
      }
      

      这样,您可以在任何地方访问您当前的登录方法,这样做:

      Auth::user()->providers()->whereTrue('is_current')->first();
      

      当然,您可以在模型中创建一个访问器来缩短它:

      # User.php
      
      public function getCurrentProviderAttribute()
      {
          return $this->providers()->where('is_current', true)->first();
      }
      

      所以现在,你可以做的很简单:

      Auth::user()->current_provider;
      

      【讨论】:

      • 这是一个很好的解决方案。现在我更喜欢 Ruben 的修补程序,因为它更简单。谢谢各位
      猜你喜欢
      • 2018-12-03
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 2019-06-18
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      相关资源
      最近更新 更多