Как авторизоваться и запомнить пользователя из dApp на сервере Laravel с использованием HTTP-аутентификации? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь настроить несколько маршрутов для Laravel API, которые получают и отправляют данные через отдельное приложение.Прямо сейчас у меня это общается так:

const request = require('request')

    const options = {url:'http://***.vagrant/signPersonal',headers: {'content-type': 'application/json'}}
    request.post(options,function (error, response, body) {
      console.log(error,response,body)
      const signedData = '0x'+body.replace(/^"(.*)"$/, '$1');
      console.log('sig: '+signedData.toString('hex'))
      callback(error, signedData)
    }).auth('****@**.*','123456123456',true).form(message)

По сути, я хочу настроить портал входа в систему через dApp (не приложение Laravel), чтобы аутентифицировать пользователя в течение определенного времени.Итак, как я могу аутентифицировать пользователя по маршрутам и тайм-аут их сеанса входа в систему на dApp.

1 Ответ

0 голосов
/ 12 апреля 2019

Закончилось просто не использованием промежуточного программного обеспечения, а созданием нескольких пользовательских функций для моей собственной системы аутентификации.Маршрут аутентификации, который обновляет токен запоминания с помощью обычного запроса авторизации:

Route::get('/auth',function (Request $request){
    $email = $request->getUser();
    $password = $request->getPassword();
    if (Auth::attempt(['email' => $email, 'password' => $password], true)) {
        User::updateRemembertoken(Auth::user(),Str::random(60));
        $token = Auth::getUser()['remember_token'];
        return response($token);
    }
});

Этот токен затем сохраняется на стороне клиента приложения и возвращается в качестве заголовка «авторизации» для каждого другого http-вызова приложения.,Я добавил это в User.php в Laravel API:

    /**
     * Check to see if the "remember_me" token has been updated within the hour.
     *
     * @param  string  $date
     * @return bool
     */
    public static function tokenExpired($date){
        $date = Carbon::createFromTimeString($date);
        $currenttime = Carbon::now();
        $timePlushour = $date->addHour();
        if($currenttime->greaterThanOrEqualTo($timePlushour)){
            return true;
        }else{
            return false;
        }
    }
    /**
     * Update the "remember me" token for the given user in storage.
     *
     * @param  \Illuminate\Contracts\Auth\Authenticatable  $user
     * @param  string  $token
     * @return void
     */
    public static function updateRememberToken(User $user, $token)
    {
        $user->remember_token = $token;
        //$user->setUpdatedAt(Carbon::now());
        $user->save();
    }

    public static function authUser(string $token){

        $findId = User::select('id')->where('remember_token',$token)->first();

        if($findId){
            if(Auth::loginUsingId($findId['id'])){
                $user = Auth::user()->all();
                if(User::tokenExpired(Auth::user()->updated_at)){
                    User::updateRemembertoken(Auth::user(),Str::random(60));
                }
                return Auth::user();
            }
        }else{
            return false;
        }
    }

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

...