【问题标题】:Symfony dynamic database credentialsSymfony 动态数据库凭据
【发布时间】:2021-03-10 08:02:24
【问题描述】:

是否可以在应用程序启动时在 Symfony 中输入设置数据库用户/密码(如 phpMyAdmin)?

我希望我的应用程序这样做:

  • 欢迎页面(只有 html,没有数据库连接,只需输入 db 用户名/密码(如 phpMyAdmin))
  • 用户在输入上设置用户名/密码,然后单击确定按钮 => 可以通过示例将值设置为控制器中的请求/发布或会话
  • Symfony 将数据库连接到所有应用程序并将用户重定向到“app_index”路由

Symfony 5 可以做到吗?

这是我的控制器操作:

public function database_login(Request $request, Connection $connection): Response
  {
    if ($request->isMethod('POST') && $request->request->has('dbpass')) {
      $dbpass = $request->request->get('dbpass');
      $params = $connection->getParams();
      $params['password'] = $dbpass;

      $connection->__construct($params, $connection->getDriver(), $connection->getConfiguration(), $connection->getEventManager());
      $connection->connect();
      return $this->redirectToRoute('app_index');
    }
    return new Response(
      '<form method="post">
        <input type="password" name="dbpass">
        <button type="submit">OK</button>
      </form>'
    );
  }

新连接工作正常,但在redirecToRoute() 函数后丢失。

你能帮帮我吗?

【问题讨论】:

  • HTTP 是无状态的。如果您不将数据库登录详细信息保存在某处,显然用户输入的任何凭据都会丢失
  • 是的,我想使用 Session 或 $config->setParameter 而不是 Request,但我不知道如何使用它为所有控制器注入原则。文档没有解释如何使用它:S
  • 为什么不创建登录页面并使用 access_control 保护所有路由,除非 /login ?像这样,所有应用程序都将受到保护,您将被重定向到自动登录
  • 我想让用户能够使用他自己的数据库凭据(如 phpmyadmin)连接到数据库

标签: php database symfony authentication dynamic


【解决方案1】:

@barbuslex,您可以将变量保存到会话中。

$request->getSession()->set('db_login', 'login');
$request->getSession()->set('db_password', 'password');

另外,为避免每次请求都手动传递这些参数,您可以使用 EventListener,例如:https://symfony.com/doc/current/event_dispatcher.html#request-events-checking-types

但是,也许您需要另一个更早触发的事件。或者玩弄听者的“优先级”。

【讨论】:

  • 谢谢!我知道如何使用会话。我已经在 dbal obect 上看到了带有 wrapper_class 的方法,但我无法访问 ConnectionWrapper 类中的 Session/Request :S 如果我了解它如何与 Doctrine 一起使用,我将与 EventListener 进行检查......
  • 需要在Listener中获取RequestStack,见symfony.com/doc/current/service_container/request.html
  • 谢谢!是否可以将其注入 wrapper_class 以进行数据库连接?
猜你喜欢
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 2021-09-09
  • 1970-01-01
相关资源
最近更新 更多