【问题标题】:Laravel custom auth based on json data基于 json 数据的 Laravel 自定义认证
【发布时间】:2020-05-28 10:04:16
【问题描述】:

我正在尝试基于 laravel 中的第三方 api 进行身份验证。不存储或使用本地数据库中的数据。在这里,我将 api 响应数据保留为一个数组,仅用于可视化。它显示错误 Argument 1 传递给 Illuminate\Auth\SessionGuard::login() must be an instance of Illuminate\Contracts\Auth\Authenticatable, string given, called in vendor\laravel\framework\src\Illuminate\Auth\ AuthManager.php 。我该如何解决。我也对它进行了研发。在此先感谢

    $user = [
        'status' => '200',
        'token' => 'aWsIpvOEZfv4sfSRUGS2dDeGw7',
        'id' => '12454545412',
        'user' => [
            'name' => 'xyz',
            'email' => 'xyz@gmail.com',
            'phone' => '12344787',
        ],
    ];

    $user = json_encode($user);
    Auth::login($user);
    return redirect( '/home' );

【问题讨论】:

  • 为什么在不验证用户数据时需要进行身份验证?如果你正在验证用户,你应该为用户提供一个具有扩展 Authenticatable 类的雄辩模型。
  • 感谢您的回复。实际上我没有提到**验证用户数据**部分。当它获得匹配数据时,那个时候 api 响应提到了 json 数据,我将这些数据保留为可视化数组。如何使用这些数据进行身份验证?
  • 您是否将用户存储在数据库中?另外,如果你想验证这些数据,你应该创建一个扩展 Authenticatable 类的辅助类,并将这些属性分配给它。
  • 不,我没有把它保存在用户数据库中,我不想要这个
  • 能否请您将此解决方案作为答案。我没有得到你的解决方案

标签: laravel laravel-5


【解决方案1】:

如果您愿意,您应该将 User 类创建为虚拟模型。

namespace App\Helpers; // depends on you 

use Illuminate\Foundation\Auth\User as Authenticatable;

class AuthUser extends Authenticatable
{
    protected $guarded = [];
}

你可以这样使用:

$user = [
    'id' => '12454545412',
    'name' => 'xyz',
    'email' => 'xyz@gmail.com',
    'phone' => 1234564897,
    'token' => 'aWsIpvOEZfv4sfSRUGS2dDeGw7' // if you need in your user Object
];
$user = new AuthUser($user);
Auth::login($user);
dd(auth()->user());

【讨论】:

  • 非常感谢兄弟。它有效,但只有一件小事。如果我在控制器中使用 public function __construct() { $this->middleware('auth'); } 它不允许该身份验证
  • 你在app/Http/Kernet.php中注册了这个中间件吗?
猜你喜欢
  • 2019-06-25
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 2018-11-14
  • 1970-01-01
  • 2016-01-09
相关资源
最近更新 更多