Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF2][Symfony]logowanie poprzez formularz html
Forum PHP.pl > Forum > PHP > Frameworki
damianooo
Przy zalogowaniu się poprzez formularz html nie mogę odczytać nazwy użytkownika:

  1. ..
  2. <p>Username: {{ app.user.username }}</p>
  3. ...


Co ciekawe WebProfiler pokazuje mi komunikat na pasku "You are not authenticated". A po kliknięciu go otwiera się Profiler z zakładką Security i wpisem "No token"
Wychodzi na to, że chyba jednak nie jestem zalogowany sad.gif .

W pliku security.yml mam tak:

  1. security:
  2. encoders:
  3. My\TyperkaBundle\Entity\User:
  4. algorithm: bcrypt
  5.  
  6. role_hierarchy:
  7. ROLE_ADMIN: ROLE_USER
  8. ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
  9.  
  10.  
  11. providers:
  12. typerka_users:
  13. entity:
  14. class: MyTyperkaBundle:User
  15. property: username
  16.  
  17. firewalls:
  18. dev:
  19. pattern: ^/(_(profiler|wdt)|css|images|js)/
  20. security: false
  21.  
  22. typerka_security:
  23. pattern: ^/
  24. anonymous: ~
  25. form_login:
  26. check_path: _check_path
  27. login_path: typerka_login
  28. default_target_path: typerka_index
  29. logout:
  30. path: _logout
  31. target: typerka_index



co może być powodem braku uwierzytelnienia ?
kpt_lucek
Cytat(damianooo @ 21.10.2015, 22:43:22 ) *
  1. providers:
  2. typerka_users:
  3. entity:
  4. class: MyTyperkaBundle:User
  5. property: username
http://symfony.com/doc/current/reference/c...t-configuration

Zobacz to

A przedtem, pokaż obiekt user'a
damianooo
  1. namespace My\TyperkaBundle\Entity;
  2.  
  3. use Symfony\Component\Security\Core\User\AdvancedUserInterface;
  4. use Doctrine\ORM\Mapping as ORM;
  5.  
  6. /**
  7.  * @ORM\Entity(repositoryClass="My\TyperkaBundle\Repository\UserRepository")
  8.  * @ORM\Table(name="users")
  9.  */
  10. class User implements AdvancedUserInterface, \Serializable {
  11.  
  12. /**
  13.   * @ORM\Column(type="integer")
  14.   * @ORM\Id
  15.   * @ORM\GeneratedValue (strategy="AUTO")
  16.   */
  17. private $id;
  18.  
  19. /**
  20.   * @ORM\Column(type="string", length=20 , unique = true)
  21.   */
  22. private $username;
  23.  
  24. /**
  25.   * @ORM\Column(type="string", length=120 , unique = true)
  26.   */
  27. private $email;
  28.  
  29. /**
  30.   * @ORM\Column(type="string", length=64)
  31.   */
  32. private $password;
  33.  
  34. private $plainPassword;
  35.  
  36. /**
  37.   * @ORM\Column(name="account_non_expired" , type="boolean")
  38.   */
  39. private $accountNonExpired = true;
  40.  
  41. /**
  42.   * @ORM\Column(name="account_non_locked" , type="boolean")
  43.   */
  44. private $accountNonLocked = true;
  45.  
  46. /**
  47.   * @ORM\Column(name="credentials_non_expired" , type="boolean")
  48.   */
  49. private $credentialsNonExpired = true;
  50.  
  51. /**
  52.   * @ORM\Column(type="boolean")
  53.   */
  54. private $enabled = false;
  55.  
  56. /**
  57.   * @ORM\Column(type="array")
  58.   */
  59. private $roles;
  60.  
  61. /**
  62.   * @ORM\Column(name="action_token", type="string", length=20, nullable = true)
  63.   */
  64. private $actionToken;
  65.  
  66. /**
  67.   * @ORM\Column(name="register_date", type="datetime")
  68.   */
  69. private $registerDate;
  70.  
  71. /**
  72.   * @ORM\Column(type="string", length=100, nullable = true)
  73.   */
  74. private $avatar;
  75.  
  76. function __construct() {
  77. $this->registerDate = new \DateTime();
  78. }
  79.  
  80.  
  81.  
  82.  
  83. public function eraseCredentials() {
  84. $this->plainPassword = null;
  85. }
  86.  
  87. public function getPassword() {
  88. return $this->password;
  89. }
  90.  
  91. public function getRoles() {
  92. return $this->roles;
  93. }
  94.  
  95. public function getSalt() {
  96. return null;
  97. }
  98.  
  99. public function getUsername() {
  100. $this->username;
  101. }
  102.  
  103. public function isAccountNonExpired() {
  104. return $this->accountNonExpired;
  105. }
  106.  
  107. public function isAccountNonLocked() {
  108. return $this->accountNonLocked;
  109. }
  110.  
  111. public function isCredentialsNonExpired() {
  112. return $this->credentialsNonExpired;
  113. }
  114.  
  115. public function isEnabled() {
  116. return $this->enabled;
  117. }
  118.  
  119.  
  120. /**
  121.   * Get id
  122.   *
  123.   * @return integer
  124.   */
  125. public function getId()
  126. {
  127. return $this->id;
  128. }
  129.  
  130. /**
  131.   * Set username
  132.   *
  133.   * @param string $username
  134.   *
  135.   * @return User
  136.   */
  137. public function setUsername($username)
  138. {
  139. $this->username = $username;
  140.  
  141. return $this;
  142. }
  143.  
  144. /**
  145.   * Set email
  146.   *
  147.   * @param string $email
  148.   *
  149.   * @return User
  150.   */
  151. public function setEmail($email)
  152. {
  153. $this->email = $email;
  154.  
  155. return $this;
  156. }
  157.  
  158. /**
  159.   * Get email
  160.   *
  161.   * @return string
  162.   */
  163. public function getEmail()
  164. {
  165. return $this->email;
  166. }
  167.  
  168. /**
  169.   * Set password
  170.   *
  171.   * @param string $password
  172.   *
  173.   * @return User
  174.   */
  175. public function setPassword($password)
  176. {
  177. $this->password = $password;
  178.  
  179. return $this;
  180. }
  181.  
  182. /**
  183.   * Set accountNonExpired
  184.   *
  185.   * @param boolean $accountNonExpired
  186.   *
  187.   * @return User
  188.   */
  189. public function setAccountNonExpired($accountNonExpired)
  190. {
  191. $this->accountNonExpired = $accountNonExpired;
  192.  
  193. return $this;
  194. }
  195.  
  196. /**
  197.   * Get accountNonExpired
  198.   *
  199.   * @return boolean
  200.   */
  201. public function getAccountNonExpired()
  202. {
  203. return $this->accountNonExpired;
  204. }
  205.  
  206. /**
  207.   * Set accountNonLocked
  208.   *
  209.   * @param boolean $accountNonLocked
  210.   *
  211.   * @return User
  212.   */
  213. public function setAccountNonLocked($accountNonLocked)
  214. {
  215. $this->accountNonLocked = $accountNonLocked;
  216.  
  217. return $this;
  218. }
  219.  
  220. /**
  221.   * Get accountNonLocked
  222.   *
  223.   * @return boolean
  224.   */
  225. public function getAccountNonLocked()
  226. {
  227. return $this->accountNonLocked;
  228. }
  229.  
  230. /**
  231.   * Set credentialsNonExpired
  232.   *
  233.   * @param boolean $credentialsNonExpired
  234.   *
  235.   * @return User
  236.   */
  237. public function setCredentialsNonExpired($credentialsNonExpired)
  238. {
  239. $this->credentialsNonExpired = $credentialsNonExpired;
  240.  
  241. return $this;
  242. }
  243.  
  244. /**
  245.   * Get credentialsNonExpired
  246.   *
  247.   * @return boolean
  248.   */
  249. public function getCredentialsNonExpired()
  250. {
  251. return $this->credentialsNonExpired;
  252. }
  253.  
  254. /**
  255.   * Set enabled
  256.   *
  257.   * @param boolean $enabled
  258.   *
  259.   * @return User
  260.   */
  261. public function setEnabled($enabled)
  262. {
  263. $this->enabled = $enabled;
  264.  
  265. return $this;
  266. }
  267.  
  268. /**
  269.   * Get enabled
  270.   *
  271.   * @return boolean
  272.   */
  273. public function getEnabled()
  274. {
  275. return $this->enabled;
  276. }
  277.  
  278. /**
  279.   * Set roles
  280.   *
  281.   * @param array $roles
  282.   *
  283.   * @return User
  284.   */
  285. public function setRoles($roles)
  286. {
  287. $this->roles = $roles;
  288.  
  289. return $this;
  290. }
  291.  
  292. /**
  293.   * Set actionToken
  294.   *
  295.   * @param string $actionToken
  296.   *
  297.   * @return User
  298.   */
  299. public function setActionToken($actionToken)
  300. {
  301. $this->actionToken = $actionToken;
  302.  
  303. return $this;
  304. }
  305.  
  306. /**
  307.   * Get actionToken
  308.   *
  309.   * @return string
  310.   */
  311. public function getActionToken()
  312. {
  313. return $this->actionToken;
  314. }
  315.  
  316. /**
  317.   * Set registerDate
  318.   *
  319.   * @param \DateTime $registerDate
  320.   *
  321.   * @return User
  322.   */
  323. public function setRegisterDate($registerDate)
  324. {
  325. $this->registerDate = $registerDate;
  326.  
  327. return $this;
  328. }
  329.  
  330. /**
  331.   * Get registerDate
  332.   *
  333.   * @return \DateTime
  334.   */
  335. public function getRegisterDate()
  336. {
  337. return $this->registerDate;
  338. }
  339.  
  340. /**
  341.   * Set avatar
  342.   *
  343.   * @param string $avatar
  344.   *
  345.   * @return User
  346.   */
  347. public function setAvatar($avatar)
  348. {
  349. $this->avatar = $avatar;
  350.  
  351. return $this;
  352. }
  353.  
  354. /**
  355.   * Get avatar
  356.   *
  357.   * @return string
  358.   */
  359. public function getAvatar()
  360. {
  361. return $this->avatar;
  362. }
  363.  
  364. public function serialize() {
  365. return serialize(array(
  366. $this->id,
  367. $this->username,
  368. $this->password
  369. ));
  370. }
  371.  
  372. public function unserialize($serialized) {
  373. list(
  374. $this->id,
  375. $this->username,
  376. $this->password
  377. ) = unserialize($serialized);
  378. }
  379.  
  380. }
kpt_lucek
Sprawdź logi, albo, najłatwiej będzie Ci sprawdzić poprzez catch redirect:
http://stackoverflow.com/a/8749974

I pamiętaj, że użytkownik musi mieć role (tablica stringów, bądź RoleInterface - o ile dobrze pamiętam - zaczynających się od ROLE_)
damianooo
w logach nie widzę nic podejrzanego:
  1. [2015-10-28 17:04:23] request.INFO: Matched route "typerka_login" (parameters: "_controller": "My\TyperkaBundle\Controller\LoginController::loginAction", "_route": "typerka_login") [] []
  2. [2015-10-28 17:04:23] security.INFO: Populated SecurityContext with an anonymous Token [] []
  3. [2015-10-28 17:04:23] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ErrorsLoggerListener::injectLogg
    er". [] []
  4.  
  5. ...
  6.  
  7. [2015-10-28 17:04:23] event.DEBUG: Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernel
    Controller". [] []
  8. [2015-10-28 17:04:24] event.DEBUG: Notified event "kernel.view" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernel
    View". [] []
  9. [2015-10-28 17:04:24] event.DEBUG: Listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernel
    View" stopped propagation of the event "kernel.view". [] []
  10. [2015-10-28 17:04:24] security.DEBUG: Write SecurityContext in the session [] []
  11.  
  12. ...
  13.  
  14. [2015-10-28 17:04:24] event.DEBUG: Notified event "kernel.terminate" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelTermin
    ate". [] []
  15. [2015-10-28 17:04:24] request.INFO: Matched route "_wdt" (parameters: "_controller": "web_profiler.controller.profiler:toolbarAction", "token": "6f197e", "_route": "_wdt") [] []
  16. [2015-10-28 17:04:24] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ErrorsLoggerListener::injectLogg
    er". [] []
  17.  
  18. ...
  19.  
  20. [2015-10-28 17:04:39] request.INFO: Matched route "_check_path" (parameters: "_route": "_check_path") [] []
  21. [2015-10-28 17:04:39] doctrine.DEBUG: SELECT t0.id AS id_1, t0.username AS username_2, t0.email AS email_3, t0.password AS password_4, t0.account_non_expired AS account_non_expired_5, t0.account_non_locked AS account_non_locked_6, t0.credentials_non_expired AS credentials_non_expired_7, t0.enabled AS enabled_8, t0.roles AS roles_9, t0.action_token AS action_token_10, t0.register_date AS register_date_11, t0.avatar AS avatar_12 FROM users t0 WHERE t0.username = ? LIMIT 1 ["adas_no"] []
  22. [2015-10-28 17:04:40] security.INFO: User "" has been authenticated successfully [] []
  23.  
  24. ...
  25.  
  26.  
  27. [2015-10-28 17:04:40] event.DEBUG: Listener "Symfony\Component\Security\Http\Firewall::onKernelRequest" stopped propagation of the event "kernel.request". [] []
  28. [2015-10-28 17:04:40] event.DEBUG: Listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest" was not called for event "kernel.request". [] []
  29. [2015-10-28 17:04:40] security.DEBUG: Write SecurityContext in the session [] []
  30.  
  31. ...
  32.  
  33. [2015-10-28 17:04:40] event.DEBUG: Notified event "kernel.terminate" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelTermin
    ate". [] []
  34. [2015-10-28 17:04:40] request.INFO: Matched route "typerka_index" (parameters: "_controller": "My\TyperkaBundle\Controller\MainController::indexAction", "_route": "typerka_index") [] []
  35. [2015-10-28 17:04:40] security.DEBUG: Read SecurityContext from the session [] []
  36. [2015-10-28 17:04:40] security.DEBUG: Reloading user from user provider. [] []
  37. [2015-10-28 17:04:40] doctrine.DEBUG: SELECT t0.id AS id_1, t0.username AS username_2, t0.email AS email_3, t0.password AS password_4, t0.account_non_expired AS account_non_expired_5, t0.account_non_locked AS account_non_locked_6, t0.credentials_non_expired AS credentials_non_expired_7, t0.enabled AS enabled_8, t0.roles AS roles_9, t0.action_token AS action_token_10, t0.register_date AS register_date_11, t0.avatar AS avatar_12 FROM users t0 WHERE t0.id = ? [1] []
  38. [2015-10-28 17:04:40] security.DEBUG: Username "" was reloaded from user provider. [] []
  39.  
  40. ...
  41.  
  42. [2015-10-28 17:04:40] event.DEBUG: Notified event "kernel.view" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernel
    View". [] []
  43. [2015-10-28 17:04:40] event.DEBUG: Listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernel
    View" stopped propagation of the event "kernel.view". [] []
  44. [2015-10-28 17:04:40] security.DEBUG: Write SecurityContext in the session [] []
  45.  
  46. ...
  47.  
  48. [2015-10-28 17:04:40] event.DEBUG: Notified event "kernel.terminate" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelTermin
    ate". [] []
  49. [2015-10-28 17:04:40] request.INFO: Matched route "_wdt" (parameters: "_controller": "web_profiler.controller.profiler:toolbarAction", "token": "c2dee3", "_route": "_wdt") [] []
  50. [2015-10-28 17:04:40] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ErrorsLoggerListener::injectLogg
    er". [] []
kpt_lucek
Cytat(damianooo @ 28.10.2015, 18:57:23 ) *
w logach nie widzę nic podejrzanego:
[html]
[2015-10-28 17:04:40] doctrine.DEBUG: SELECT t0.id AS id_1, t0.username AS username_2, t0.email AS email_3, t0.password AS password_4, t0.account_non_expired AS account_non_expired_5, t0.account_non_locked AS account_non_locked_6, t0.credentials_non_expired AS credentials_non_expired_7, t0.enabled AS enabled_8, t0.roles AS roles_9, t0.action_token AS action_token_10, t0.register_date AS register_date_11, t0.avatar AS avatar_12 FROM users t0 WHERE t0.id = ? [1] []
[2015-10-28 17:04:40] security.DEBUG: Username "" was reloaded from user provider. [] []

damianooo
Chyba ślepy jestem smile.gif
Zapytanie SQL jest ok.
Nie bardzo rozumiem jednak o co chodzi we wpisie:
Username "" was reloaded from user provider. [] []
(jeśli dobrze tłumaczę z angielskiego to chodzi o to , że użytkownik został załadowany z user providera a więc ścieżka w providerze do klasy użytkowika i właściwości username powinna być OK )

Na dowód że powinnno być ok:

w My\TyperkaBundle\DataFixtures\ORM\UsersFixtures.pho dodaję takiego użytkownika:

  1. ...
  2. $usersList = array(
  3. 'nick' => 'adas_no',
  4. 'email' => 'anowak@costam.pl',
  5. 'password' => '123',
  6. 'role' => 'ROLE_USER'
  7. ),
  8. ...
  9. foreach ($usersList as $userDetails) {
  10. $User = new User();
  11.  
  12. $password = $encoderFactory->getEncoder($User)->encodePassword($userDetails['password'], null);
  13.  
  14. $User->setUsername($userDetails['nick'])
  15. ->setEmail($userDetails['email'])
  16. ->setPassword($password)
  17. ->setRoles(array($userDetails['role']))
  18. ->setEnabled(true);
  19. ...


w formularzu mam tak:

  1. <div class="form-row">
  2. <label for="login" class="required">Login</label>
  3. <input id="login" type="text" name="_username" value="{{ userName }}">
  4. </div>


natomiast w security.yml mam tak:

  1. providers:
  2. typerka_users:
  3. entity:
  4. class: MyTyperkaBundle:User
  5. property: username


kpt_lucek
Cytat
Username "" was reloaded from user provider. [] []


Jak w/w wpis nic Ci nie mówi, to zwróć uwagę na wartość username pomiędzy "
damianooo
tutaj username jest puste ...
użytkownik nie jest więc uwierzytelniany ...
pytanie dlaczego nie jest i co o mam w związku z tym źle ustawione ?

błąd znaleziony:

Jednak błąd był w klasie User:

konkretnie w miejscu:

  1. public function getUsername() {
  2. $this->username;
  3. }


brakuje słowa "return" wink.gif

Temat do zamknięcia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.