Add last-login-ip capture capability (#184)
This commit is contained in:
committed by
Lorenzo Milesi
parent
01d9052416
commit
71f9587374
@ -1,6 +1,7 @@
|
||||
# CHANGELOG
|
||||
|
||||
## 1.1.5 - Work in progress
|
||||
- Enh #184: Add `last-login-ip` capture capability (kartik-v)
|
||||
- Enh: Changed `View::render()` calls in views to use absolute paths (ajmedway)
|
||||
- Fix #169: Fix bug in ReCaptchaComponent (BuTaMuH)
|
||||
- Fix #168: Fix spelling in russian language (EvgenyOrekhov)
|
||||
|
||||
@ -137,7 +137,10 @@ class SecurityController extends Controller
|
||||
|
||||
$this->trigger(FormEvent::EVENT_BEFORE_LOGIN, $event);
|
||||
if ($form->login()) {
|
||||
$form->getUser()->updateAttributes(['last_login_at' => time()]);
|
||||
$form->getUser()->updateAttributes([
|
||||
'last_login_at' => time(),
|
||||
'last_login_ip' => Yii::$app->request->getUserIP(),
|
||||
]);
|
||||
|
||||
$this->trigger(FormEvent::EVENT_AFTER_LOGIN, $event);
|
||||
|
||||
|
||||
29
src/User/Migration/m000000_000008_add_last_login_ip.php
Normal file
29
src/User/Migration/m000000_000008_add_last_login_ip.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
namespace Da\User\Migration;
|
||||
|
||||
use yii\db\Migration;
|
||||
use yii\db\Schema;
|
||||
|
||||
|
||||
/**
|
||||
* Class m000000_000008_add_last_login_ip
|
||||
* @author: Kartik Visweswaran
|
||||
*/
|
||||
class m000000_000008_add_last_login_ip extends Migration
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function safeUp()
|
||||
{
|
||||
$this->addColumn('{{%user}}', 'last_login_ip', Schema::TYPE_STRING . '(45) DEFAULT NULL AFTER last_login_at');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function safeDown()
|
||||
{
|
||||
$this->dropColumn('{{%user}}', 'last_login_ip');
|
||||
}
|
||||
}
|
||||
@ -43,13 +43,14 @@ use yii\web\IdentityInterface;
|
||||
* @property string $auth_key
|
||||
* @property string $auth_tf_key
|
||||
* @property int $auth_tf_enabled
|
||||
* @property int $registration_ip
|
||||
* @property string $registration_ip
|
||||
* @property int $confirmed_at
|
||||
* @property int $blocked_at
|
||||
* @property int $flags
|
||||
* @property int $created_at
|
||||
* @property int $updated_at
|
||||
* @property int $last_login_at
|
||||
* @property string $last_login_ip
|
||||
* @property int $password_changed_at
|
||||
* @property int $password_age
|
||||
*
|
||||
@ -150,7 +151,8 @@ class User extends ActiveRecord implements IdentityInterface
|
||||
'password' => Yii::t('usuario', 'Password'),
|
||||
'created_at' => Yii::t('usuario', 'Registration time'),
|
||||
'confirmed_at' => Yii::t('usuario', 'Confirmation time'),
|
||||
'last_login_at' => Yii::t('usuario', 'Last login'),
|
||||
'last_login_at' => Yii::t('usuario', 'Last login time'),
|
||||
'last_login_ip' => Yii::t('usuario', 'Last login IP'),
|
||||
'password_changed_at' => Yii::t('usuario', 'Last password change'),
|
||||
'password_age' => Yii::t('usuario', 'Password age'),
|
||||
];
|
||||
|
||||
@ -39,6 +39,10 @@ class UserSearch extends Model
|
||||
* @var string
|
||||
*/
|
||||
public $registration_ip;
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $last_login_ip;
|
||||
/**
|
||||
* @var UserQuery
|
||||
*/
|
||||
@ -62,7 +66,7 @@ class UserSearch extends Model
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'safeFields' => [['username', 'email', 'registration_ip', 'created_at', 'last_login_at'], 'safe'],
|
||||
'safeFields' => [['username', 'email', 'registration_ip', 'created_at', 'last_login_at, last_login_ip'], 'safe'],
|
||||
'createdDefault' => [['created_at', 'last_login_at'], 'default', 'value' => null],
|
||||
];
|
||||
}
|
||||
@ -77,7 +81,8 @@ class UserSearch extends Model
|
||||
'email' => Yii::t('usuario', 'Email'),
|
||||
'created_at' => Yii::t('usuario', 'Registration time'),
|
||||
'registration_ip' => Yii::t('usuario', 'Registration IP'),
|
||||
'last_login_at' => Yii::t('usuario', 'Last login'),
|
||||
'last_login_at' => Yii::t('usuario', 'Last login time'),
|
||||
'last_login_ip' => Yii::t('usuario', 'Last login IP'),
|
||||
];
|
||||
}
|
||||
|
||||
@ -114,7 +119,8 @@ class UserSearch extends Model
|
||||
$query
|
||||
->andFilterWhere(['like', 'username', $this->username])
|
||||
->andFilterWhere(['like', 'email', $this->email])
|
||||
->andFilterWhere(['registration_ip' => $this->registration_ip]);
|
||||
->andFilterWhere(['registration_ip' => $this->registration_ip])
|
||||
->andFilterWhere(['last_login_ip' => $this->last_login_ip]);
|
||||
|
||||
return $dataProvider;
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
|
||||
namespace Da\User\Service;
|
||||
|
||||
use Yii;
|
||||
use Da\User\Contracts\ServiceInterface;
|
||||
use Da\User\Model\User;
|
||||
|
||||
@ -25,6 +26,9 @@ class PasswordExpireService implements ServiceInterface
|
||||
|
||||
public function run()
|
||||
{
|
||||
return $this->model->updateAttributes(['last_login_at' => time()]);
|
||||
return $this->model->updateAttributes([
|
||||
'last_login_at' => time(),
|
||||
'last_login_ip' => Yii::$app->request->getUserIP(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -52,7 +52,7 @@ $module = Yii::$app->getModule('user');
|
||||
'attribute' => 'created_at',
|
||||
'value' => function ($model) {
|
||||
if (extension_loaded('intl')) {
|
||||
return Yii::t('usuario', '{0, date, MMMM dd, YYYY HH:mm}', [$model->created_at]);
|
||||
return Yii::t('usuario', '{0, date, MMM dd, YYYY HH:mm}', [$model->created_at]);
|
||||
}
|
||||
|
||||
return date('Y-m-d G:i:s', $model->created_at);
|
||||
@ -64,12 +64,21 @@ $module = Yii::$app->getModule('user');
|
||||
if (!$model->last_login_at || $model->last_login_at == 0) {
|
||||
return Yii::t('usuario', 'Never');
|
||||
} elseif (extension_loaded('intl')) {
|
||||
return Yii::t('usuario', '{0, date, MMMM dd, YYYY HH:mm}', [$model->last_login_at]);
|
||||
return Yii::t('usuario', '{0, date, MMM dd, YYYY HH:mm}', [$model->last_login_at]);
|
||||
} else {
|
||||
return date('Y-m-d G:i:s', $model->last_login_at);
|
||||
}
|
||||
},
|
||||
],
|
||||
[
|
||||
'attribute' => 'last_login_ip',
|
||||
'value' => function ($model) {
|
||||
return $model->last_login_ip == null
|
||||
? '<span class="not-set">' . Yii::t('usuario', '(not set)') . '</span>'
|
||||
: $model->last_login_ip;
|
||||
},
|
||||
'format' => 'html',
|
||||
],
|
||||
[
|
||||
'header' => Yii::t('usuario', 'Confirmation'),
|
||||
'value' => function ($model) {
|
||||
|
||||
@ -73,6 +73,7 @@ CREATE TABLE `user` (
|
||||
`auth_tf_enabled` tinyint(1) DEFAULT '0',
|
||||
`flags` int(11) NOT NULL DEFAULT '0',
|
||||
`last_login_at` int(11) DEFAULT NULL,
|
||||
`last_login_ip` varchar(45) DEFAULT NULL,
|
||||
`password_changed_at` int(11) DEFAULT NULL,
|
||||
|
||||
PRIMARY KEY (`id`),
|
||||
|
||||
Reference in New Issue
Block a user