Symfony 3.4 $authenticationUtils参数相关求助(附security.yml配置)
$authenticationUtils Hey there, let's break down the common pitfalls and fixes when working with $authenticationUtils in Symfony 3.4, using your provided security.yml as a starting point.
First: Verify Your Controller Implementation
The most common issue is incorrect injection or usage of AuthenticationUtils in your login controller. Here's the standard working setup:
// src/AppBundle/Controller/LoginController.php namespace AppBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\Security\Http\Authentication\AuthenticationUtils; class LoginController extends Controller { public function loginAction(AuthenticationUtils $authenticationUtils) { // Grab the latest login error (if any occurred) $error = $authenticationUtils->getLastAuthenticationError(); // Get the username the user tried to use last $lastUsername = $authenticationUtils->getLastUsername(); // Pass data to your login template return $this->render('security/login.html.twig', [ 'last_username' => $lastUsername, 'error' => $error, ]); } }
Fix Your Truncated security.yml Configuration
Your main firewall's form_login section looks cut off. Here's a complete, functional version matching your setup:
security: encoders: UserBundle\Entity\User: algorithm: bcrypt providers: db_provider: entity: class: UserBundle:User property: username firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: anonymous: ~ form_login: login_path: login check_path: login default_target_path: homepage # Where to redirect after successful login remember_me: true # Optional: Enable "remember me" functionality logout: path: logout target: homepage # Where to redirect after logout access_control: # Restrict admin routes to users with ROLE_ADMIN - { path: ^/admin, roles: ROLE_ADMIN } # Restrict profile routes to authenticated users - { path: ^/profile, roles: ROLE_USER }
Ensure Your Routes Are Configured
Double-check your routing to match the login_path and check_path from security.yml:
# app/config/routing.yml login: path: /login defaults: { _controller: AppBundle:Login:login } logout: path: /logout
Check Your Login Template
Make sure your Twig template properly displays errors and uses the correct form fields:
{# app/Resources/views/security/login.html.twig #} {% if error %} <div class="alert alert-danger"> {{ error.messageKey|trans(error.messageData, 'security') }} </div> {% endif %} <form action="{{ path('login') }}" method="post"> <div> <label for="username">Username:</label> <input type="text" id="username" name="_username" value="{{ last_username }}" required /> </div> <div> <label for="password">Password:</label> <input type="password" id="password" name="_password" required /> </div> {% if is_granted('IS_AUTHENTICATED_REMEMBERED') %} <div> <input type="checkbox" id="remember_me" name="_remember_me" checked /> <label for="remember_me">Remember me</label> </div> {% endif %} <button type="submit">Log in</button> </form>
Validate Your User Entity
Ensure your User entity fully implements Symfony's UserInterface—this is critical for authentication to work:
// src/UserBundle/Entity/User.php namespace UserBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Security\Core\User\UserInterface; /** * @ORM\Entity * @ORM\Table(name="user") */ class User implements UserInterface { /** * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string", length=255, unique=true) */ private $username; /** * @ORM\Column(type="string", length=255) */ private $password; // Add your other fields (email, etc.) here public function getRoles() { // Return default role or custom roles from your entity return ['ROLE_USER']; } public function getPassword() { return $this->password; } public function getUsername() { return $this->username; } public function eraseCredentials() {} public function getSalt() { // Bcrypt doesn't require a salt, return null return null; } // Add getters/setters for your fields }
If you're still hitting issues, share the specific error message (PHP logs, browser console errors, or unexpected behavior) and we can narrow it down further!
内容的提问来源于stack exchange,提问作者Hakim LH

