сохранение пользователя вошедшего в Vue.js SPA вне SPA (websanova) - PullRequest
0 голосов
/ 02 января 2019

У меня есть встроенный SPA Vue.js - используется JWT для аутентификации и слой API , предоставляемый Laravel .

Теперь мне требуется одна страница для запуска (вне SPA / Vue) непосредственно из Laravel, но только после того, как пользователь вошел в систему. Как только там мне нужно получить доступ к Auth::user() - ноПохоже, что Laravel теперь не является пользователем, вошедшим в систему.

Не совсем уверен, какой код поместить сюда, но в любом случае это происходит:

Login.vue

<template>
    <div>
        <div class="alert alert-danger" v-if="error">
            <p class="help-block" v-if="errors">{{ errors }}</p>
            <p class="help-block" v-else >There was an error, unable to sign in with those credentials.</p>
        </div>
        <form autocomplete="off" @submit.prevent="login" method="post">
            <div class="form-group">
                <label for="email">E-mail</label>
                <input type="email" id="email" class="form-control" placeholder="user@example.com" v-model="email" required>
            </div>
            <div class="form-group">
                <label for="password">Password</label>
                <input type="password" id="password" class="form-control" v-model="password" required>
            </div>
            <button type="submit" class="btn btn-default">Sign in</button>
        </form>
    </div>
</template>


<script>
  export default {
    data(){
      return {
        email: null,
        password: null,
        error: false,
        errors: {}
      }
    },

    methods: {
      login(){
        var app = this
        this.$auth.login({
            params: {
              email: app.email,
              password: app.password
            },
            success: function (resp) {
                //app.error = true;
                //console.log('>>> '+resp.response.data.msg);
                //app.errors = resp.response.data.msg;
            },
            error: function (resp) {
                app.error = true;
                //console.log('>>> '+resp.response.data.msg);
                app.errors = resp.response.data.msg;
            },
            rememberMe: true,
            redirect: '/dashboard',
            fetchUser: true,
        });
      },
    }
  }
</script>

routs / api.php

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Route::post('auth/register', 'AuthController@register');
Route::post('auth/login', 'AuthController@login');
Route::post('findmember', 'FoundItemController@searchMember');
Route::post('sendmessage', 'MessagingController@sendMessage');



Route::group(['middleware' => 'jwt.auth'], function(){
    //
    // User auth controllers/methods should go here
    //
    Route::get('packages', 'PackageController@getPackages');

    Route::get('auth/user', 'AuthController@user');
    Route::post('auth/logout', 'AuthController@logout');
    Route::get('user/items', 'ItemController@getItems');
    Route::post('user/items/add', 'ItemController@addItem');
    Route::get('user/mobile_numbers', 'MobileNumbersController@getNumbers');
    Route::post('user/mobile_numbers/add', 'MobileNumbersController@addNumber');
    Route::post('user/mobile_numbers/primary', 'MobileNumbersController@setPrimary');
    Route::post('user/mobile_numbers/delete', 'MobileNumbersController@removeNumber');

    Route::post('subscription/paypal/complete');
});

Route::group(['middleware' => 'jwt.refresh'], function(){
    Route::get('auth/refresh', 'AuthController@refresh');
});

/ routs / web.php

Route::get('/', function () {
    return view('welcome');
});

Auth::routes(['verify' => true]);
Route::get('/verify', 'AuthController@verify')->name('verify');


Route::group(['middleware' => 'jwt.auth'], function(){
    Route::get('testing', 'HomeController@index');
});

Я пытался добавить промежуточную оболочку вокруг моего домашнего контроллера (см. Ниже), но это возвращает null), я чувствую, что должен сказать Laravel, что пользователь вошел в систему каким-то образом, но я полностью озадачен.

.. / controllers / HomeController.php Пространство имен App \ Http \ Controllers;

use Illuminate\Http\Request;

use App\User;
use Illuminate\Support\Facades\Auth;
use JWTAuth;
use Log;

class HomeController extends Controller
{

    public function index()
    {
        //return view('home');
        dd(Auth::user());
    }
}

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Вы можете использовать этот метод, я использовал в своем проекте, он работает круто.

auth('api')->user();
0 голосов
/ 03 января 2019

Я вообще не знаю laravel, но вот общая идея того, что я буду делать, с вашей единственной страницы:

  • при первом запросе запросите маршрут на laravel, чтобы получить jwt (иногда этот маршрут /me).
  • при следующих запросах введите jwt на странице headers. Имя токена token, а значение равно Bearer ${token}.

На стороне сервера проверьте токен, прежде чем продолжить запрос.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...