選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

97 行
2.5KB

  1. <?php
  2. namespace common\models;
  3. use Yii;
  4. use yii\base\Model;
  5. /**
  6. * Login form
  7. */
  8. class LoginForm extends Model {
  9. public $username;
  10. public $password;
  11. public $rememberMe = true;
  12. public $email;
  13. private $_user = false;
  14. /**
  15. * @inheritdoc
  16. */
  17. public function rules() {
  18. return [
  19. ['email', 'filter', 'filter' => 'trim'],
  20. ['email', 'required', 'message' => 'Champs obligatoire'],
  21. ['email', 'email'],
  22. // username and password are both required
  23. [ 'password', 'required', 'message' => 'Champs obligatoire'],
  24. // rememberMe must be a boolean value
  25. ['rememberMe', 'boolean'],
  26. // password is validated by validatePassword()
  27. ['password', 'validatePassword'],
  28. ];
  29. }
  30. /**
  31. * Validates the password.
  32. * This method serves as the inline validation for password.
  33. *
  34. * @param string $attribute the attribute currently being validated
  35. * @param array $params the additional name-value pairs given in the rule
  36. */
  37. public function validatePassword($attribute, $params) {
  38. if (!$this->hasErrors()) {
  39. $user = $this->getUser();
  40. if (!$user || !$user->validatePassword($this->password)) {
  41. $this->addError($attribute, 'Email ou mot de passe incorrect');
  42. }
  43. }
  44. }
  45. /**
  46. * Logs in a user using the provided username and password.
  47. *
  48. * @return boolean whether the user is logged in successfully
  49. */
  50. public function login() {
  51. if ($this->validate()) {
  52. $this->updateDerniereConnexion();
  53. return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
  54. } else {
  55. return false;
  56. }
  57. }
  58. /**
  59. * Finds user by [[username]]
  60. *
  61. * @return User|null
  62. */
  63. public function getUser() {
  64. if ($this->_user === false) {
  65. $this->_user = User::findByEmail($this->email);
  66. }
  67. return $this->_user;
  68. }
  69. public function attributeLabels() {
  70. return [
  71. 'id' => 'ID',
  72. 'username' => 'Identifiant',
  73. 'password' => 'Mot de passe',
  74. 'rememberMe' => 'Se souvenir de moi',
  75. 'email' => 'Email',
  76. ];
  77. }
  78. public function updateDerniereConnexion() {
  79. $user = $this->getUser();
  80. $user->date_derniere_connexion = date('Y-m-d H:i:s');
  81. $user->save();
  82. }
  83. }