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
|
# CHANGELOG
|
||||||
|
|
||||||
## 1.1.5 - Work in progress
|
## 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)
|
- Enh: Changed `View::render()` calls in views to use absolute paths (ajmedway)
|
||||||
- Fix #169: Fix bug in ReCaptchaComponent (BuTaMuH)
|
- Fix #169: Fix bug in ReCaptchaComponent (BuTaMuH)
|
||||||
- Fix #168: Fix spelling in russian language (EvgenyOrekhov)
|
- Fix #168: Fix spelling in russian language (EvgenyOrekhov)
|
||||||
|
|||||||
@ -137,7 +137,10 @@ class SecurityController extends Controller
|
|||||||
|
|
||||||
$this->trigger(FormEvent::EVENT_BEFORE_LOGIN, $event);
|
$this->trigger(FormEvent::EVENT_BEFORE_LOGIN, $event);
|
||||||
if ($form->login()) {
|
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);
|
$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_key
|
||||||
* @property string $auth_tf_key
|
* @property string $auth_tf_key
|
||||||
* @property int $auth_tf_enabled
|
* @property int $auth_tf_enabled
|
||||||
* @property int $registration_ip
|
* @property string $registration_ip
|
||||||
* @property int $confirmed_at
|
* @property int $confirmed_at
|
||||||
* @property int $blocked_at
|
* @property int $blocked_at
|
||||||
* @property int $flags
|
* @property int $flags
|
||||||
* @property int $created_at
|
* @property int $created_at
|
||||||
* @property int $updated_at
|
* @property int $updated_at
|
||||||
* @property int $last_login_at
|
* @property int $last_login_at
|
||||||
|
* @property string $last_login_ip
|
||||||
* @property int $password_changed_at
|
* @property int $password_changed_at
|
||||||
* @property int $password_age
|
* @property int $password_age
|
||||||
*
|
*
|
||||||
@ -150,7 +151,8 @@ class User extends ActiveRecord implements IdentityInterface
|
|||||||
'password' => Yii::t('usuario', 'Password'),
|
'password' => Yii::t('usuario', 'Password'),
|
||||||
'created_at' => Yii::t('usuario', 'Registration time'),
|
'created_at' => Yii::t('usuario', 'Registration time'),
|
||||||
'confirmed_at' => Yii::t('usuario', 'Confirmation 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_changed_at' => Yii::t('usuario', 'Last password change'),
|
||||||
'password_age' => Yii::t('usuario', 'Password age'),
|
'password_age' => Yii::t('usuario', 'Password age'),
|
||||||
];
|
];
|
||||||
|
|||||||
@ -39,6 +39,10 @@ class UserSearch extends Model
|
|||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
public $registration_ip;
|
public $registration_ip;
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $last_login_ip;
|
||||||
/**
|
/**
|
||||||
* @var UserQuery
|
* @var UserQuery
|
||||||
*/
|
*/
|
||||||
@ -62,7 +66,7 @@ class UserSearch extends Model
|
|||||||
public function rules()
|
public function rules()
|
||||||
{
|
{
|
||||||
return [
|
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],
|
'createdDefault' => [['created_at', 'last_login_at'], 'default', 'value' => null],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -77,7 +81,8 @@ class UserSearch extends Model
|
|||||||
'email' => Yii::t('usuario', 'Email'),
|
'email' => Yii::t('usuario', 'Email'),
|
||||||
'created_at' => Yii::t('usuario', 'Registration time'),
|
'created_at' => Yii::t('usuario', 'Registration time'),
|
||||||
'registration_ip' => Yii::t('usuario', 'Registration IP'),
|
'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
|
$query
|
||||||
->andFilterWhere(['like', 'username', $this->username])
|
->andFilterWhere(['like', 'username', $this->username])
|
||||||
->andFilterWhere(['like', 'email', $this->email])
|
->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;
|
return $dataProvider;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace Da\User\Service;
|
namespace Da\User\Service;
|
||||||
|
|
||||||
|
use Yii;
|
||||||
use Da\User\Contracts\ServiceInterface;
|
use Da\User\Contracts\ServiceInterface;
|
||||||
use Da\User\Model\User;
|
use Da\User\Model\User;
|
||||||
|
|
||||||
@ -25,6 +26,9 @@ class PasswordExpireService implements ServiceInterface
|
|||||||
|
|
||||||
public function run()
|
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',
|
'attribute' => 'created_at',
|
||||||
'value' => function ($model) {
|
'value' => function ($model) {
|
||||||
if (extension_loaded('intl')) {
|
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);
|
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) {
|
if (!$model->last_login_at || $model->last_login_at == 0) {
|
||||||
return Yii::t('usuario', 'Never');
|
return Yii::t('usuario', 'Never');
|
||||||
} elseif (extension_loaded('intl')) {
|
} 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 {
|
} else {
|
||||||
return date('Y-m-d G:i:s', $model->last_login_at);
|
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'),
|
'header' => Yii::t('usuario', 'Confirmation'),
|
||||||
'value' => function ($model) {
|
'value' => function ($model) {
|
||||||
|
|||||||
@ -73,6 +73,7 @@ CREATE TABLE `user` (
|
|||||||
`auth_tf_enabled` tinyint(1) DEFAULT '0',
|
`auth_tf_enabled` tinyint(1) DEFAULT '0',
|
||||||
`flags` int(11) NOT NULL DEFAULT '0',
|
`flags` int(11) NOT NULL DEFAULT '0',
|
||||||
`last_login_at` int(11) DEFAULT NULL,
|
`last_login_at` int(11) DEFAULT NULL,
|
||||||
|
`last_login_ip` varchar(45) DEFAULT NULL,
|
||||||
`password_changed_at` int(11) DEFAULT NULL,
|
`password_changed_at` int(11) DEFAULT NULL,
|
||||||
|
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
|
|||||||
Reference in New Issue
Block a user