我是Symfony 4的新手,它主要是我第一次使用某些东西来处理与管理面板的连接,或者是yaml文件来设置参数。根据文档中的建议,我使用的是安全配方。由于整个站点都在我的计算机上工作,我在线部署它,连接问题就开始了。
所以这就是我的问题:
我用用户名开发网站时创建了一个用户:用户名和密码:密码。我推荐使用argon2i。当在远程服务器中切换到生产模式时,我只是转储数据库并将其复制到服务器上。登录页面未重定向到管理面板。
我认为这可能是因为argon2算法在操作系统资源上产生了盐,或类似的东西。所以我为User重新生成了密码。 Connexion仍然没有工作。我尝试了另一种算法(每次都直接在数据库中更改密码)。
我认为无法为不同角色设置生产模式,所以我将安全设置角色降低到 date time count type
1 2018-04-02 01:00:00 01:00 100 load
2 2018-04-02 01:00:00 01:00 3462 unload
3 2018-04-02 02:00:00 02:00 35 load
4 2018-04-02 02:00:00 02:00 2031 unload
我尝试在计算机中的生产和开发模式中重新创建相同的设置,现在它已不再有效了。
我首先认为这是因为服务器配置,但它显然不是我尝试使用Apache服务器,服务器配方提供的PHP服务器以及PHP原始服务器。当我获得所有服务器的HTTP代码401时,我认为这是由于Symfony将数据库中的散列密码与用户输入的明文密码进行比较。我可能错了,但这似乎是最可能的问题。
我也不知道如何解决这个问题。我尝试使用自动生成的表单(我不知道在表单有效并提交时如何设置逻辑),我尝试使用#34;旧学校"弹出,所以我认为安全配置会处理这个......
这是我的代码:
IS_AUTHENTICATED_FULLY
config/packages/security.yaml
security:
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
db_provider:
entity:
class: App\Entity\User
property: username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
logout:
path: /logout
target: /
prod:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
logout:
path: /logout
target: /
main:
anonymous: ~
http_basic: ~
provider: db_provider
# form_login:
# login_path: login
# check_path: login
# default_target_path: projects_index
# always_use_default_target_path: true
# remember_me:
# secret: '%kernel.secret%'
# lifetime: 604800 # 1 week in seconds
# path: /
# always_remember_me: true
logout:
path: /logout
target: /
pattern: ^/admin
encoders:
Symfony\Component\Security\Core\User\User: plaintext
App\Entity\User:
algorithm: sha512
# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
- { path: ^/admin, roles: IS_AUTHENTICATED_FULLY }
# - { path: ^/user, roles: ROLE_ADMIN }
session_fixation_strategy: migrate
hide_user_not_found: true
always_authenticate_before_granting: false
erase_credentials: true
access_decision_manager:
strategy: affirmative # One of affirmative, consensus, unanimous
allow_if_all_abstain: false
allow_if_equal_granted_denied: true
src/Controller/SecurityController.php
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends Controller
{
/**
* @Route("/login", name="login")
*/
public function login(Request $request, AuthenticationUtils $authenticationUtils, UserPasswordE$
{
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', array(
'last_username' => $lastUsername,
'error' => $error,
));
}
}
src/Form/UserType.php
我希望我足够具体,并且您将帮助我找到解决方案。非常感谢你!