установить временную метку последнего входа пользователя rainlab от JWTAuth - PullRequest
0 голосов
/ 29 сентября 2018

Мне удалось создать jwtauth для подключения моего мобильного приложения к бэкэнду octobercms из этой ссылки , но поле last_login всегда пустое, я считаю, что оно не установлено по умолчанию.это аутентифицированная функция, которая у меня есть

use Tymon\JWTAuth\JWTAuth;

public function __construct(JWTAuth $auth)
{
    $this->auth = $auth;
}

public function authenticate(Request $request)
{
    try {
        if (! $token = $this->auth->attempt($request->only('email', 'password'))) {
            return response()->json([
                'errors' => [
                    'root' => 'Could not sign you in with those details.',
                ],
            ], 401);
        }
    } catch (JWTException $e) {
        return response()->json([
            'errors' => [
                'root' => 'Failed.',
            ],
        ], $e->getStatusCode());
    }

    return response()->json([
        'data' => $request->user(),
        'meta' => [
            'token' => $token,
        ],
    ]);
} 

, она вызывается этим route.php из папки jwtauth

Route::group(['prefix' => 'api'], function () {
Route::post('auth/login','Autumn\JWTAuth\Http\Controllers\AuthController@authenticate');
Route::post('auth/register', 'Autumn\JWTAuth\Http\Controllers\AuthController@register');
Route::post('auth/logout', 'Autumn\JWTAuth\Http\Controllers\AuthController@logout');    

Route::group(['middleware' => 'jwt.auth'], function () {
    Route::get('auth/me', 'Autumn\JWTAuth\Http\Controllers\AuthController@user');        
});    

как установить пользовательскую метку времени last_login?Я надеюсь, что мой вопрос понятен.

добавлен plugin.php, где я расширил плагин пользователя по запросу @HardikSatasiya, так как получил исключение, реализующее его предложение

use System\Classes\PluginBase;
use Rainlab\User\Controllers\Users as UsersController;
use Rainlab\User\Models\User as UserModels;
use Event;

class Plugin extends PluginBase
{
  public function registerComponents()
  {
  }

  public function registerSettings()
  {
  }

  public function boot()
  {
    UserModels::extend(function($model){

        $model->bindEvent('model.beforeSave',function() use ($model) {

            $users = \BackendAuth::getUser();               
            $model->backend_users_id = $users->id;              
            //above line result exception when calling method as @HardikSatasiya suggested          
            if(!empty($model->avatar)){
                $model->image_path = $model->avatar->getPath();
            }
            if(!empty($model->groups)){
                $model->membership = $model->groups[0]['name'];
            }
        });

        $model->addJsonable('users_detail','membership');
    }); 



    UsersController::extendFormFields(function($form,$model,$context){

        $form->addTabFields([
            'users_detail[0][gender]' => [
                'label' => 'Jenis Kelamin',
                'span' => 'left',
                'tab' => 'User Profile',
                'type' => 'radio',
                'options' => [
                    'Pria' => 'Pria',
                    'Wanita' => 'Wanita'
                ] 
            ],
            'users_detail[0][ttl]' => [
                'label' => 'Tempat/Tanggal Lahir',
                'type' => 'text',
                'span' => 'left',
                'tab' => 'User Profile'
            ],           
        ]);  
    });
  }

я добавил дополнительные поля втаблица пользователей этим отдельным плагином ..

1 Ответ

0 голосов
/ 06 октября 2018

Хорошо, возможно, потому что внутренние перехватчики не вызываются, когда этот плагин извлекает пользователя из системы.

Может быть, нам нужно вызвать его вручную , этот фрагмент кода может это сделать, просто поставьте code после успешного входа в систему.

// this will fire hooks and update `last_login`
// get authenticated user from the jwt authmanager
$user = $this->auth->authenticate($token);
$user->afterLogin();

Добавлено в ваш код ниже.

public function authenticate(Request $request)
{
    try {
        if (! $token = $this->auth->attempt($request->only('email', 'password'))) {
            return response()->json([
                'errors' => [
                    'root' => 'Could not sign you in with those details.',
                ],
            ], 401);
        }
    } catch (JWTException $e) {
        return response()->json([
            'errors' => [
                'root' => 'Failed.',
            ],
        ], $e->getStatusCode());
    }

    // this will fire hooks and update `last_login`
    // get authenticated user from the jwt authmanager
    $user = $this->auth->authenticate($token);
    $user->afterLogin();
    // ^ this code

    return response()->json([
        'data' => $request->user(),
        'meta' => [
            'token' => $token,
        ],
    ]);
}

этот фрагмент будетобновите last_login как ожидалось.я не проверял его, но он будет работать как надо.

если есть какие-либо сомнения или проблемы, пожалуйста, прокомментируйте.

...