- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此刻我完全迷失了,两天我试图弄清楚为什么我总是在我的登录表单上获得“错误的凭据”响应。
我使用过 How to load Security Users from the Database 教程。
有什么方法可以知道他在比较什么才能获得“不良凭据”错误?
转储的错误:
exception 'Symfony\Component\Security\Core\Exception\BadCredentialsException' with message 'Bad credentials' in D:\dev\workspace\esig_grandprojet\vendor\symfony\symfony\src\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider.php:89 Stack trace:
#0 D:\dev\workspace\esig_grandprojet\app\cache\dev\classes.php(107): session_start()
#1 D:\dev\workspace\esig_grandprojet\app\cache\dev\classes.php(184): Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage->start()
#2 D:\dev\workspace\esig_grandprojet\app\cache\dev\classes.php(482): Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage->getBag('attributes')
#3 D:\dev\workspace\esig_grandprojet\src\ESIG\BBC\ManagerCP2Bundle\Controller\SecurityController.php(45): Symfony\Component\HttpFoundation\Session\Session->get('_security.last_...')
#4 [internal function]: ESIG\BBC\ManagerCP2Bundle\Controller\SecurityController->loginAction()
#5 D:\dev\workspace\esig_grandprojet\app\bootstrap.php.cache(2844): call_user_func_array(Array, Array)
#6 D:\dev\workspace\esig_grandprojet\app\bootstrap.php.cache(2818): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#7 D:\dev\workspace\esig_grandprojet\app\bootstrap.php.cache(2947): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#8 D:\dev\workspace\esig_grandprojet\app\bootstrap.php.cache(2249): Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#9 D:\dev\workspace\esig_grandprojet\web\app_dev.php(28): Symfony\Component\HttpKernel\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#10 {main}
security:
encoders:
ESIG\BBC\ManagerCP2Bundle\Entity\Utilisateur:
algorithm: sha512
encode_as_base64: true
iterations: 5000
providers:
users:
entity: { class: ESIGBBCManagerCP2Bundle:Utilisateur }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/login$
security: false
main:
pattern: /.*
form_login:
# The user is redirected here when he needs to login
login_path: _security_login
#if true, forward the user to the login form instead of redirecting
use_forward: false
# submit the login form here
check_path: _security_check
# by default, the login form *must* be a POST, not a GET
post_only: true
# login success redirecting options
always_use_default_target_path: true
default_target_path: /
target_path_parameter: _target_path
use_referer: false
# login failure redirecting options
failure_path: null
failure_forward: false
# field names for the username and password fields
username_parameter: _username
password_parameter: _password
#csrf token options
csrf_parameter: _csrf_token
intention: authenticate
logout: true
security: true
anonymous: true
remember_me:
key: "%secret%"
lifetime: 3600
path: /
domain: ~ #Default to the current domain from $_SERVER
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /.*, roles: IS_AUTHENTICATED_REMEMBERED }
#- { path: ^/demo/secured/hello/admin/, roles: ROLE_ADMIN }
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
<?php
namespace ESIG\BBC\ManagerCP2Bundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* Utilisateur
*
* @ORM\Table(name="mcp2_utilisateur")
* @ORM\Entity(repositoryClass="ESIG\BBC\ManagerCP2Bundle\Entity\UtilisateurRepository")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="uti_discr", type="string")
* @ORM\DiscriminatorMap({"utilisateur" = "Utilisateur", "pompier" = "Pompier"})
*
* @UniqueEntity(fields="username", message="error.input.unique.user")
* @UniqueEntity(fields="email", message="error.input.unique.mail")
*/
class Utilisateur implements AdvancedUserInterface, \Serializable
{
/**
* @var integer
*
* @ORM\Column(name="uti_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="uti_nom_utilisateur", type="string", length=50, unique=true)
* @Assert\NotBlank(message="error.input.blank")
*/
private $username;
/**
* @ORM\Column(name="uti_salt", type="string", length=255)
*/
private $salt;
/**
* @var string
*
* @ORM\Column(name="uti_mot_de_passe", type="string", length=255)
* @Assert\NotBlank(message="error.input.blank")
*/
private $password;
/**
* @var string
*
* @ORM\Column(name="uti_email", type="string", length=100, unique=true)
* @Assert\NotBlank(message="error.input.blank")
* @Assert\Email(message="error.input.invalid.mail")
*/
private $email;
/**
* @var boolean
*
* @ORM\Column(name="uti_is_active", type="boolean")
* @Assert\NotBlank(message="error.input.blank")
*/
private $isActive;
/**
* @var boolean
*
* @ORM\Column(name="uti_mot_de_passe_expire", type="boolean")
* @Assert\NotBlank(message="error.input.blank")
*/
private $motDePasseExpire;
/**
* @var string
*
* @ORM\Column(name="uti_nom", type="string", length=50)
* @Assert\NotBlank(message="error.input.blank")
*/
private $nom;
/**
* @var string
*
* @ORM\Column(name="uti_prenom", type="string", length=50)
* @Assert\NotBlank(message="error.input.blank")
*/
private $prenom;
/**
* @var string
*
* @ORM\Column(name="uti_adresse", type="text")
* @Assert\NotBlank(message="error.input.blank")
*/
private $adresse;
/**
* @var string
*
* @ORM\Column(name="uti_telephone", type="string", length=13)
* @Assert\NotBlank(message="error.input.blank")
*/
private $telephone;
/**
* @var boolean
*
* @ORM\Column(name="uti_date_derniere_connexion", type="boolean", nullable=true)
*/
private $dateDerniereConnexion;
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="GroupeAutorisation", inversedBy="utilisateurs")
* @ORM\JoinTable(name="mcp2_associe",
* joinColumns={@ORM\JoinColumn(name="ass_uti_id", referencedColumnName="uti_id")},
* inverseJoinColumns={@ORM\JoinColumn(name="ass_gra_id", referencedColumnName="gra_id")}
* )
*/
private $groupesAutorisation;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Notification", mappedBy="utilisateur", cascade={"persist", "remove"})
*/
private $notifications;
public function __construct() {
$this->isActive = True;
$this->salt = md5(uniqid(null, true));
$this->groupesAutorisation = new \Doctrine\Common\Collections\ArrayCollection();
$this->notifications = new \Doctrine\Common\Collections\ArrayCollection();
$this->motDePasseExpire = False;
}
/**
* Returns the username used to authenticate the user.
*
* @return string The username
*/
public function getUsername() {
return $this->username;
}
public function getSalt() {
//return $this->salt;
return null;
}
public function getPassword() {
$this->password;
}
public function getRoles() {
// special
//return $this->groupesAutorisation->toArray();
return array('ROLE_USER');
}
public function equals(UserInterface $user)
{
/*
if (!$account instanceof Account) {
return false;
}
if($this->password !== $user->getPassword()) {
return false;
}
if($this->getSalt() !== $user->getSalt()) {
return false;
}
if($this->getUsername() !== $user->getUsername()) {
return false;
}
return true; */
return md5($this->getUsername()) == md5($user->getUsername());
}
/**
* Removes sensitive data from the user.
*
* This is important if, at any given point, sensitive information like
* the plain-text password is stored on this object.
*/
public function eraseCredentials() {
}
/**
* @see \Serializable::serialize()
*/
public function serialize()
{
return serialize(array(
$this->id,
));
}
/**
* @see \Serializable::unserialize()
*/
public function unserialize($serialized)
{
list (
$this->id,
) = unserialize($serialized);
}
public function isAccountNonExpired()
{
return true;
}
public function isAccountNonLocked()
{
return true;
}
public function isCredentialsNonExpired()
{
return true;
}
public function isEnabled()
{
return $this->isActive;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set username
*
* @param string $username
* @return Utilisateur
*/
public function setUsername($nomUtilisateur)
{
$this->username = $nomUtilisateur;
return $this;
}
/**
* Set motDePasse
*
* @param string $motDePasse
* @return Utilisateur
*/
public function setPassword($motDePasse)
{
$this->password = $motDePasse;
return $this;
}
/**
* Set email
*
* @param string $email
* @return Utilisateur
*/
public function setEmail($email)
{
$this->email = $email;
return $this;
}
/**
* Get email
*
* @return string
*/
public function getEmail()
{
return $this->email;
}
/**
* Get groupes
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getGroupes()
{
return $this->groupes;
}
/**
* Add notifications
*
* @param \ESIG\BBC\ManagerCP2Bundle\Entity\Notification $notifications
* @return Utilisateur
*/
public function addNotification(\ESIG\BBC\ManagerCP2Bundle\Entity\Notification $notifications)
{
$this->notifications[] = $notifications;
return $this;
}
/**
* Add groupesAutorisation
*
* @param \ESIG\BBC\ManagerCP2Bundle\Entity\GroupeAutorisation $groupesAutorisation
* @return Utilisateur
*/
public function addGroupesAutorisation(\ESIG\BBC\ManagerCP2Bundle\Entity\GroupeAutorisation $groupesAutorisation)
{
$this->groupesAutorisation[] = $groupesAutorisation;
return $this;
}
/**
* Remove groupesAutorisation
*
* @param \ESIG\BBC\ManagerCP2Bundle\Entity\GroupeAutorisation $groupesAutorisation
*/
public function removeGroupesAutorisation(\ESIG\BBC\ManagerCP2Bundle\Entity\GroupeAutorisation $groupesAutorisation)
{
$this->groupesAutorisation->removeElement($groupesAutorisation);
}
/**
* Get groupesAutorisation
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getGroupesAutorisation()
{
return $this->groupesAutorisation;
}
/**
* Set salt
*
* @param string $salt
* @return Utilisateur
*/
public function setSalt($salt)
{
$this->salt = $salt;
return $this;
}
/**
* Set isActive
*
* @param boolean $isActive
* @return Utilisateur
*/
public function setIsActive($isActive)
{
$this->isActive = $isActive;
return $this;
}
/**
* Get isActive
*
* @return boolean
*/
public function isActive()
{
return $this->isActive;
}
}
<?php
namespace ESIG\BBC\ManagerCP2Bundle\Entity;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NoResultException;
use ESIG\BBC\ManagerCP2Bundle\Entity\Notification;
/**
* UtilisateurRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class UtilisateurRepository extends EntityRepository implements UserProviderInterface
{
public function loadUserByUsername($username)
{
$q = $this
->createQueryBuilder('u')
->where('u.username = :username OR u.email = :email')
->setParameter('username', $username)
->setParameter('email', $username)
->getQuery();
try {
// La méthode Query::getSingleResult() lance une exception
// s'il n'y a pas d'entrée correspondante aux critères
$user = $q->getSingleResult();
} catch (NoResultException $e) {
throw new UsernameNotFoundException(sprintf('Unable to find an active admin AcmeUserBundle:User object identified by "%s".', $username), 0, $e);
}
return $user;
}
public function refreshUser(UserInterface $user)
{
$class = get_class($user);
if (!$this->supportsClass($class)) {
throw new UnsupportedUserException(
sprintf(
'Instances of "%s" are not supported.',
$class
)
);
}
return $this->find($user->getId());
}
public function supportsClass($class)
{
return $this->getEntityName() === $class || is_subclass_of($class, $this->getEntityName());
}
}
<?php
namespace ESIG\BBC\ManagerCP2Bundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Security\Core\SecurityContext;
class SecurityController extends Controller
{
/**
* @Template("ESIGBBCManagerCP2Bundle::menu.html.twig")
*/
public function GenerateMenuAction()
{
return array();
}
/**
* @Route("/login", name="_security_login")
* @Template("ESIGBBCManagerCP2Bundle:Security:login.html.twig")
*/
public function loginAction()
{
$request = $this->getRequest();
$session = $request->getSession();
// Récupère l'erreur de login si il y en a une
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $session->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
}
return array(
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error
);
}
/**
* @Route("/login_check", name="_security_check")
* @Template("ESIGBBCManagerCP2Bundle:Security:login.html.twig")
*/
public function securityCheckAction()
{
}
/**
* @Route("/logout", name="_security_logout")
* @Template("ESIGBBCManagerCP2Bundle:Security:login.html.twig")
*/
public function logoutAction()
{
return array();
}
}
{% extends "ESIGBBCManagerCP2Bundle::ManagerCP2.html.twig" %}
{% block right %}
{{ error }}
{% if error %}
<div>{{ error.message }}</div>
{% endif %}
{{ test }}
<form action="{{ path('_security_check') }}" method="post">
<label for="username">Login :</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" title="{{ "login.mail.title" | trans }}" /><br />
<label for="password" >Mot de passe :</label>
<input type="password" id="password" name="_password" title="{{ "login.password.title" | trans }}" /><br />
<input type="checkbox" id="remember_me" name="_remember_me" title="{{ "login.rememberme.title" | trans }}" checked /> <label for="remember_me" >Se souvenir de moi</label><br />
{#
Si vous voulez contrôler l'URL vers laquelle l'utilisateur est redirigé en cas de succès
(plus de détails ci-dessous)
<input type="hidden" name="_target_path" value="/account" />
#}
<button type="submit" name="login" title="{{ "login.submit.title" | trans }}">{{ "login.submit.value" | trans }}</button>
</form>
{% endblock %}
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
namespace ESIG\BBC\ManagerCP2Bundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use ESIG\BBC\ManagerCP2Bundle\Entity\Pompier;
use ESIG\BBC\ManagerCP2Bundle\Entity\Utilisateur;
use \Symfony\Component\Security\Core\Encoder\Pbkdf2PasswordEncoder;
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
/**
* Description of LoadUserData
*
* @author noirv_000
*/
class LoadUserData implements FixtureInterface
{
public function load(ObjectManager $manager)
{
$pwd_encoder = new MessageDigestPasswordEncoder('sha512', true, 5000);
// Super Administrateur
$superAdmin = new Utilisateur();
$superAdmin->setNom("Admin")
->setPrenom("Super")
->setUsername("super.admin")
->setEmail("super@admin.foo")
->setPassword($pwd_encoder->encodePassword("12345678", $superAdmin->getSalt()))
->setAdresse("Chemin de l'administration")
->setTelephone("0041000000000");
$manager->persist($superAdmin);
// Enregistre toutes les nouvelles entrées
$manager->flush();
}
}
最佳答案
首先检查 UserAuthenticationProvider 字符串如何编码您的密码并将其与数据夹具生成的进行比较
关于security - Symfony 2.3 Bad Credentials 自定义提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19380262/
我是 C 语言新手,我编写了这个 C 程序,让用户输入一年中的某一天,作为返回,程序将输出月份以及该月的哪一天。该程序运行良好,但我现在想简化该程序。我知道我需要一个循环,但我不知道如何去做。这是程序
我一直在努力找出我的代码有什么问题。这个想法是创建一个小的画图程序,并有红色、绿色、蓝色和清除按钮。我有我能想到的一切让它工作,但无法弄清楚代码有什么问题。程序打开,然后立即关闭。 import ja
我想安装screen,但是接下来我应该做什么? $ brew search screen imgur-screenshot screen
我有一个在服务器端工作的 UDP 套接字应用程序。为了测试服务器端,我编写了一个简单的 python 客户端程序,它发送消息“hello world how are you”。服务器随后应接收消息,将
我有一个 shell 脚本,它运行一个 Python 程序来预处理一些数据,然后运行一个 R 程序来执行一些长时间运行的任务。我正在学习使用 Docker 并且我一直在运行 FROM r-base:l
在 Linux 中。我有一个 c 程序,它读取一个 2048 字节的文本文件作为输入。我想从 Python 脚本启动 c 程序。我希望 Python 脚本将文本字符串作为参数传递给 c 程序,而不是将
前言 最近开始整理笔记里的库存草稿,本文是 23 年 5 月创建的了(因为中途转移到 onedrive,可能还不止) 网页调起电脑程序是经常用到的场景,比如百度网盘下载,加入 QQ 群之类的 我
对于一个类,我被要求编写一个 VHDL 程序,该程序接受两个整数输入 A 和 B,并用 A+B 替换 A,用 A-B 替换 B。我编写了以下程序和测试平台。它完成了实现和行为语法检查,但它不会模拟。尽
module Algorithm where import System.Random import Data.Maybe import Data.List type Atom = String ty
我想找到两个以上数字的最小公倍数 求给定N个数的最小公倍数的C++程序 最佳答案 int lcm(int a, int b) { return (a/gcd(a,b))*b; } 对于gcd,请查看
这个程序有错误。谁能解决这个问题? Error is :TempRecord already defines a member called 'this' with the same paramete
当我运行下面的程序时,我在 str1 和 str2 中得到了垃圾值。所以 #include #include #include using namespace std; int main() {
这是我的作业: 一对刚出生的兔子(一公一母)被放在田里。兔子在一个月大时可以交配,因此在第二个月的月底,每对兔子都会生出两对新兔子,然后死去。 注:在第0个月,有0对兔子。第 1 个月,有 1 对兔子
我编写了一个程序,通过对字母使用 switch 命令将十进制字符串转换为十六进制,但是如果我使用 char,该程序无法正常工作!没有 switch 我无法处理 9 以上的数字。我希望你能理解我,因为我
我是 C++ 新手(虽然我有一些 C 语言经验)和 MySQL,我正在尝试制作一个从 MySQL 读取数据库的程序,我一直在关注这个 tutorial但当我尝试“构建”解决方案时出现错误。 (我正在使
仍然是一个初学者,只是尝试使用 swift 中的一些基本函数。 有人能告诉我这段代码有什么问题吗? import UIKit var guessInt: Int var randomNum = arc
我正在用 C++11 编写一个函数,它采用 constant1 + constant2 形式的表达式并将它们折叠起来。 constant1 和 constant2 存储在 std::string 中,
我用 C++ 编写了这段代码,使用运算符重载对 2 个矩阵进行加法和乘法运算。当我执行代码时,它会在第 57 行和第 59 行产生错误,非法结构操作(两行都出现相同的错误)。请解释我的错误。提前致谢:
我是 C++ 的初学者,我想编写一个简单的程序来交换字符串中的两个字符。 例如;我们输入这个字符串:“EXAMPLE”,我们给它交换这两个字符:“E”和“A”,输出应该类似于“AXEMPLA”。 我在
我需要以下代码的帮助: 声明 3 个 double 类型变量,每个代表三角形的三个边中的一个。 提示用户为第一面输入一个值,然后 将用户的输入设置为您创建的代表三角形第一条边的变量。 将最后 2 个步
我是一名优秀的程序员,十分优秀!