ctms/ctms-admin/models/LoginForm.php
fm453 39282ec584 修复登陆日志入库错误,升级部分composer依赖项;
临时修复登陆通知邮件不能多发的问题;
2025-04-10 23:19:15 +08:00

152 lines
4.3 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @Author: fm453
* @Date: 2021-09-09 22:59:04
* @Last Modified by: fm453
* @Last Modified time: 2021-09-10 19:55:54
* @Email: fm453@lukegzs.com
*/
namespace backend\models;
use Yii;
use yii\base\Model;
use common\models\CLog;
use backend\models\Adminer;
/**
* Login form
*/
class LoginForm extends Model
{
public $username;
public $password;
public $rememberMe = true;
private $_user; //防止被外部程序修改
/**
* @inheritdoc
*/
public function rules()
{
return [
// username and password are both required
[['username', 'password'], 'required'],
// rememberMe must be a boolean value
['rememberMe', 'boolean'],
// password is validated by validatePassword()
['password', 'validatePassword'],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'username' => Yii::t('common','Username'),
'password' => Yii::t('common','Password'),
'rememberMe' => Yii::t('common','Remember Me'),
];
}
/**
* Validates the password.
* This method serves as the inline validation for password.
*
* @param string $attribute the attribute currently being validated
* @param array $params the additional name-value pairs given in the rule
*/
public function validatePassword($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUser();
if (!$user || !$user->validatePassword($this->password)) {
$this->addError($attribute, Yii::t('common','Incorrect username or password.'));
}
}
}
/**
* Logs in a user using the provided username and password.
*
* @return bool whether the user is logged in successfully
*/
public function login()
{
if ($this->validate()) {
return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
}
return false; //如果为true 将允许任意密码登陆
}
/**
* Finds user by [[username]]
*
* @return User|null
*/
protected function getUser()
{
if ($this->_user === null) {
$this->_user = Adminer::findByUsername($this->username); //千万注意后端的登陆使用的是Adminer模型不是User
}
return $this->_user;
}
//登录记录
public function loginLog(){
$request = Yii::$app->getRequest();
$nowFile = $request -> getScriptFile();
$url = $request->getUrl();
$hostInfo = $request->getHostInfo();
$port = $request->getPort();
$data = "登陆系统:";
$data .= "|域名:" . $hostInfo;
$data .= "|端口:" . $port;
$data .= "|网址:" . $url;
$data .= "|脚本:" . $nowFile;
$model = new CLog();
$model->username = $this->username;
$model->ip = Yii::$app->request->userIP;
$model->data = $data;
$model->create_time = time();
$model->save();
// $res = $model->getErrors(); //数据保存报错时可以用此打印出错误
//编制邮件发送通知(并发问题导致502错误故暂只发一个邮件
$messages = [];
$message = Yii::$app->mailer->compose();
// $message->setFrom(Yii::$app->params['noticeEmail']);
//message 给登陆者发送
$subject = "账号登陆提醒";
$body = "您的账号【" . $this->username . "】刚刚登陆了网站:" . $request->absoluteUrl;
$message->setTo(Yii::$app->user->identity->email);
$message->setSubject($subject);
$message->setTextBody($body);
// $message->send(); //单发时可用该方法群发时会导致页面卡停报502错
$messages[] = $message;
//message2 给管理人员发送
$message2 = Yii::$app->mailer->compose();
$subject = "账号登陆提醒";
$body = "运维账号【" . $this->username . "】刚刚登陆了网站:" . $request->absoluteUrl;
$message2->setTo('1280880631@qq.com');
$message2->setSubject($subject);
$message2->setTextBody($body);
$message2->send();
$messages[] = $message2;
//群发
// Yii::$app->mailer->sendMultiple($messages);
}
}