- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 Laravel passport 进行 API 身份验证,当我将它与一个数据库一起使用时它可以完美地工作,但在使用多个数据库时会出现 401
,
我在做什么:
oauth_clients
会从master DB复制Password Grant Token和Personal Access Token插入子DB,同时在oauth_personal_access_clients
中插入client_id
。 我正在执行 passport:install
命令执行的所有过程。 (如果我没有遗漏任何东西)。
当我使用主数据库的凭据登录时,它工作得很好,当我使用子数据库的凭据登录时,真正的问题开始了,我可以从参数 client_code
获取子数据库,我登录时输入email
,password
它允许我从子数据库登录,但我收到 401 Unauthenticated
错误,登录时获取访问 token ,我通过 Authentication
header 和 Bearer
在从 Angular
前端登录后的每个请求上。
不知道我在这里遗漏了什么。
DBConnection 中间件
DBConnection 中间件在登录后为每个请求设置连接,
public function handle($request, Closure $next)
{
if ( $request->method() != 'OPTIONS' ) {
$this->access_code = $request->header('access-code');
if ( $this->access_code != '' && $this->access_code != 'sa' ) {
app('App\Http\Controllers\Controller')->setDB(AppHelper::DB_PREFIX.$this->access_code);
} else {
app('App\Http\Controllers\Controller')->setDB(AppHelper::DB_DEFAULT);
}
}
return $next($request);
}
DBConnection
在 database.php
中动态设置默认数据库,为此,我调用了在 Controller 上创建的
setDB
方法。 php
setDB Controller.php
public function setDB($database='') {
$config = app()->make('config');
$connections = $config->get('database.connections');
$default_connection = $connections[$config->get('database.default')];
$new_connection = $default_connection;
$new_connection['database'] = $database;
$config->set('database.connections.'.$database, $new_connection);
$config->set('database.default', $database);
}
是否可以将 passport
与 2 个不同的数据库一起用于相同的代码?
Laravel 5.4
护照 4.0
Angular 4.4
前端
最佳答案
回答你的问题:是的,你可以!
在我们的中间件中,我们做这样的事情:
config([
'database.connections.tenant.schema' => $tenant
]);
DB::connection('tenant')->statement("SET search_path = $tenant");
我觉得您的 search_path 设置不正确。这可以解释为什么您会收到 401。因为 Laravel Passport 在错误的数据库中搜索,它无法在您的用户表中找到正确的 token 。
来自 PostgreSQL 文档(https://www.postgresql.org/docs/9.1/static/runtime-config-client.html):
search_path (string)
This variable specifies the order in which schemas are searched when an object (table, data type, function, etc.) is referenced by a simple name with no schema specified. When there are objects of identical names in different schemas, the one found first in the search path is used. An object that is not in any of the schemas in the search path can only be referenced by specifying its containing schema with a qualified (dotted) name.
关于php - Laravel 护照出现 401 Unauthenticated 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47594676/
假设有一个应用程序有 10 个动态页面(可能是表单),其中 8 个页面是受限的(需要用户登录应用程序),另外 2 个页面可供匿名用户使用。 我的前端应用程序是在 Angular 2 中开发的,后端 A
我正在将 Passport-facebook 与 ExpressJS 和 PassportJS 一起使用 我想知道如何将显示参数设置为触摸,以便当我们的 Android 设备获取登录并允许应用程序所需
我有一个nodeJS应用程序(express),它有一个facebook登录。我正在使用 Passport-facebook 身份验证,如此处所述 passport-facebook 。几周前我的登录
我正在尝试了解在使用 Passport-facebook 和 Node/express 时 Facebook 身份验证如何工作。 我对回调URL 和下面的函数感到困惑。 有人可以向我解释一下设置回调U
我有一个问题 - 我正在为我的 api 使用 Laravel Passport。我需要编写测试。每当我在测试中使用 WithoutMiddleware 特性时,它都会禁用我使用的 Implicit r
我对 Telegram Bot API 有点陌生,在机器人中我想通过 Telegram Passport 验证用户的年龄 我正在尝试重新创建他们的 Javascript SDK .按钮出现并打开 Te
如 laravel-passport 中所述登录 Controller 由 php artisan make:auth 制成在我们的路由器中 web.php会有 Auth::routes();我们 c
Laravel 上有 API,它使用 Laravel Passport 进行身份验证。一切都在默认设置下运行良好。然后我们决定将访问 token 的生命周期相应地更改为 1 天和 1 个月。它导致刷新
目前我有一个使用 Laravel Passport 的 Laravel 安装(它使用 league/oauth2-server 作为服务器实现)。我想在授予 oauth2 token 时返回用户 ID
我试图实现护照 Facebook 我在 server.js 中的代码如下所示当用户通过 facebook 点击登录时使用的路由 router.get('/auth/facebook',
我正在使用 laravel v5.8、VueJS 和 passport v7.4 进行身份验证。下面是我的登录函数: public function login(Request $request)
我尝试在 heroku 上安装我的应用程序。这个应用程序是一个 php-laravel 应用程序,带有用于身份验证的“护照”。在我的本地机器(mac os)上一切正常。 当我尝试与 postman 进
我参加 NodeJS 类(class)和观看教程有一段时间了,并决定在应用中充分利用它们。 对于这个项目,我需要用户注册和登录,以便将他们的事件存储在数据库中。这个过程我是用Passport做的,这部
我正在尝试使用 Passport-local 来限制对网站的访问。 为此,我使用login_app来运行passport-local,但这本身就是从主app.js调用的路由。当尝试在第二层(护照文件/
在我使用护照注册用户并在数据库中查看用户后。我尝试登录,但收到消息“未经授权”。这是我的登录方法: public function login(){ if(Auth::attempt(['em
我看了很多关于 Laravel passport 的文章和视频,但仍然无法理解一些东西。 我有一个适用于 Laravel 5.5 + vueJs 的应用程序。所有对后端的请求都是通过 axios 发送
所以我想对我的 API 端点进行单元测试。我正在使用 Laravel 5.8 并且 api 身份验证是使用 Passport 完成的我有以下测试: public function guest_can_
我想知道当从 API 调用中注销用户时,在 Laravel 护照的oauth_access_tokens 表中管理 token 的最佳方法是什么? 目前我只为token设置了8小时的有效期,并把所有的
CreateFreshApiToken,一旦添加到 Kernel.php 中的“web”中间件组,应该附加 laravel_token cookie 以响应通过 web 中间件发出的每个请求,不是吗?
我正在尝试安装 Laravel Passport在 Laravel 5.7.18 上使用 PHP 7.2.13。 我的应用程序使用 JavaScript(Axios 和 Vue)在自身内部使用 API
我是一名优秀的程序员,十分优秀!