代码之家  ›  专栏  ›  技术社区  ›  Isral Bustami

通过JWTAuth设置用户rainlab上次登录时间戳

  •  0
  • Isral Bustami  · 技术社区  · 7 年前

    从这个 reference 但是最后一个登录字段总是空的,我相信这不是默认设置的。 这是我拥有的经过身份验证的函数

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

    它由jwtauth文件夹中的this route.php调用

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

    如何设置用户上次登录时间戳? 我希望我的问题清楚明了。

    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 回复  |  直到 7 年前
        1
  •  1
  •   Hardik Satasiya    7 年前

    好吧,可能是因为这个插件在外部登录用户时没有调用内部钩子。

    手动调用 ,这个代码段可以做到,只要把 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 一如预期。我没有测试它,但它会工作,因为它应该。

    如果有任何疑问或问题,请评论。

    推荐文章