有没有办法在 laravel 的不同数据库中对用户进行身份验证?

Posted

技术标签:

【中文标题】有没有办法在 laravel 的不同数据库中对用户进行身份验证?【英文标题】:Is there a way to authenticate the user in different databases in laravel? 【发布时间】:2019-09-12 22:57:53 【问题描述】:

我正在实现对不同数据库的访问,但是当使用中间件('auth:api')时,它说我没有经过身份验证,当我登录时我得到了令牌。

只有当数据库不是默认数据库时才会发生这种情况

我在 laravel 5.8 上

public function login(LoginRequest $request, $db)
    
        Config::set("database.connections.mysql.database", $db);
        if (Auth::attempt(['email' => request('email'), 'password' => request('password')])) 
            $this->user = Auth::user();
            $this->user->token = $this->user->createToken('ControlEscolar')->accessToken;
            $status = 200;
         else 
            $this->user['error'] = "Unauthorized";
            $status = 401;
        
        return response()->json($this->user, $status);
    

public function userData($db)
    
        Config::set("database.connections.mysql.database", $db);
        $user = userData::whereUserId(Auth::user()->id)
            ->first();
        return $user;
    

在登录功能上我得到了这个...


    "id": 1,
    "name": "name of user",
    ...
    "token": "eyJ0eXAiO...CFU"

这样就可以了

但是在第二个用户数据中我得到了这个


    "error": 
        "message": "Unauthenticated.",
        "status_code": 500,
        "debug": 
            "line": 67,
            "file": "/Users/.../vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "class": "Illuminate\\Auth\\AuthenticationException",
            ...

有人知道该怎么做,或者我做错了什么

【问题讨论】:

你能像protected $connection = 'connection-name';一样在User模型中设置你的连接并测试吗? 我已经尝试过了,它可以工作,问题是它只允许我使用一个 BD,另一个尝试是复制模型并添加你推荐的内容,但是 . ..该项目的想法是连接许多BD,所以不是最优的 您希望多个数据库的多个表代表一个模型? 是对的,数据库的结构是一样的,我只需要一个可以简单的连接所有的方法,Configure :: set ()解决了,问题是认证的,是我的想象一下 也许这会指导你***.com/questions/46292391/… 【参考方案1】:

我像上面一样在路由文件上配置设置解决它:

$api->group(['prefix' => 'auth'], function (Router $api) 
    Config::set("database.connections.mysql.database", $db);
    $api->post('singup', 'App\\Api\\V1\\Controllers\\SignUpController@signUp');
);

顺便说一句,我正在使用 dingo Api

【讨论】:

以上是关于有没有办法在 laravel 的不同数据库中对用户进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5 中对多个表使用身份验证

如何在 Laravel 中对所有行使用多态关系?

如何在不同的语言环境中对日期对象进行 strftime? [复制]

有没有办法在 Git 中对提交进行分组?

如何从多个模型中对数据进行排序/排序?

在 laravel 中对数据数组进行分页并在 vuejs 中使用无限滚动的最佳方法