Add last-login-ip capture capability (#184)

This commit is contained in:
Kartik Visweswaran
2018-05-16 18:59:08 +05:30
committed by Lorenzo Milesi
parent 01d9052416
commit 71f9587374
8 changed files with 64 additions and 9 deletions

View File

@ -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)

View File

@ -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);

View 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');
}
}

View File

@ -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'),
];

View File

@ -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;
}

View File

@ -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(),
]);
}
}

View File

@ -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) {

View File

@ -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`),