我正在尝试在 Symfony 4 中制作一个简单的登录表单(遵循本文档: https: //symfony.com/doc/current/security/form_login_setup.html)。
我在数据库中有一个用户。如果我在登录表单中输入错误的凭据,我会收到错误的凭据错误消息。但是,如果我输入正确的凭据,我会被重定向到主页(默认行为),但没有启动任何会话,用户不在会话中。
这是我正在使用的 SecurityController:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends Controller
{
/**
* @Route("/login", name="login")
*/
public function login(Request $request, AuthenticationUtils $authenticationUtils)
{
$error = $authenticationUtils->getLastAuthenticationError();
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', array(
'last_username' => $lastUsername,
'error' => $error,
));
}
}
Run Code Online (Sandbox Code Playgroud)
security.yaml 文件:
security:
encoders:
App\Entity\user:
algorithm: bcrypt
providers:
in_memory: { memory: ~ }
quimly_db_provider:
entity:
class: App\Entity\User
property: username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: …Run Code Online (Sandbox Code Playgroud) 我有一项服务,可以通过自定义命令和 HTML 页面使用。我想防止并行多次执行该服务。对于该命令,有一个 Lock 组件来执行此操作。但是控制器方法是否可以实现同样的目标?
如果从控制器调用该服务,锁定组件将不起作用:
$store = new FlockStore(sys_get_temp_dir());
$factory = new Factory($store);
$lock = $factory->createLock('MY_SERVICE');
Run Code Online (Sandbox Code Playgroud)
我想避免从控制器调用命令(这就是我创建服务的原因),主要是因为该服务的 HTML 页面和 CLI 的输出不同。