AdminUserLogin.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. /**
  3. * FecShop file.
  4. *
  5. * @link http://www.fecshop.com/
  6. * @copyright Copyright (c) 2016 FecShop Software LLC
  7. * @license http://www.fecshop.com/license/
  8. */
  9. namespace fecshop\models\mysqldb\adminUser;
  10. use fecshop\models\mysqldb\AdminUser;
  11. use Yii;
  12. use yii\base\Model;
  13. /**
  14. * @author Terry Zhao <2358269014@qq.com>
  15. * @since 1.0
  16. */
  17. class AdminUserLogin extends Model
  18. {
  19. public $username;
  20. public $password;
  21. //public $captcha;
  22. private $_adminUser;
  23. public function rules()
  24. {
  25. return [
  26. [['username', 'password'], 'required'],
  27. ['password', 'validatePassword'],
  28. ];
  29. }
  30. public function validatePassword($attribute, $params)
  31. {
  32. if (!$this->hasErrors()) {
  33. $adminUser = $this->getAdminUser();
  34. if (!$adminUser) {
  35. $this->addError($attribute, 'username is not exist');
  36. } elseif (!$adminUser->validatePassword($this->password)) {
  37. $this->addError($attribute, 'user password is not correct');
  38. }
  39. }
  40. }
  41. public function getAdminUser()
  42. {
  43. if ($this->_adminUser === null) {
  44. $this->_adminUser = AdminUser::findByUsername($this->username);
  45. }
  46. return $this->_adminUser;
  47. }
  48. /**
  49. * @param $duration | Int
  50. * 对于参数$duration:
  51. * 1. 当不开启cookie时,$duration的设置是无效的,yii2只会从user组件Yii::$app->user->authTimeout
  52. * 中读取过期时间
  53. * 2. 当开启cookie,$duration是有效的,会设置cookie的过期时间。
  54. * 如果不传递时间,默认使用 Yii::$service->session->timeout的值。
  55. * 总之,为了方便处理cookie和session的超时时间,统一使用
  56. * session的超时时间,这样做的好处为,可以让account 和 cart session的超时时间保持一致
  57. */
  58. public function login($duration = 0)
  59. {
  60. if (!$duration) {
  61. if (Yii::$service->session->timeout) {
  62. $duration = Yii::$service->session->timeout;
  63. }
  64. }
  65. if ($this->validate()) {
  66. //return \Yii::$app->user->login($this->getAdminUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
  67. return \Yii::$app->user->login($this->getAdminUser(), $duration);
  68. } else {
  69. return false;
  70. }
  71. }
  72. }