首页 > 解决方案 > 使用 Laravel 护照和 Vuejs。Auth::User() 在刀片上不起作用

问题描述

我正在使用 Laravel 8 护照对用户进行身份验证。从我的 Vuex 商店。我像这样发送登录操作:

login({ commit}, user) {
    return new Promise((resolve, reject) => {
      let url = `/auth/login`;
      let email = user.email;
      let password = user.password;

      axios.post(url, { email, password })
      .then(response => {
        const token = response.data.token
        const user = response.data.user

        localStorage.setItem('AnimeStock.jwt', 'Bearer '+ token);
        localStorage.setItem('AnimeStock.user', JSON.stringify(user));

        axios.defaults.headers.common['Authorization'] = 'Bearer '+ token;

        commit('AUTH_SUCCESS', {token, user});

        resolve(response);
      })
      .catch(error => {
        console.log(error)
        commit('AUTH_ERROR', error.response.data.error)
        localStorage.removeItem('AnimeStock.jwt')
        localStorage.removeItem('AnimeStock.user')
        reject(error)
      })
    })
  }

这有效,并且用户已通过身份验证。接下来,我尝试像这样从我的 vue 组件中获取用户。

api.get(`/auth/user`).then(response => {
    console.log(response.data)
});

我的 API 路线:

Route::group(['prefix' => 'auth'], function () {
    //Auth routes
    Route::post('login', 'AuthController@login');
    Route::post('register', 'AuthController@register');

    Route::group(['middleware' => 'auth:api'], function() {
        Route::get('logout', 'AuthController@logout');
        Route::get('user', 'AuthController@user');
    });
});

它命中我的 AuthController 并返回当前登录的用户。

public function user()
{
     $user = Auth::user();
     return response()->json($user);
}

这是问题所在,当我在布局刀片文件上执行此操作时,它不起作用:

<script>
    @auth
      window.User= {!! json_encode(Auth::user(), true) !!};
    @else
      window.User= [];
    @endauth
</script>

这也不起作用

<script>
    @if(Auth::check())
      window.User= {!! json_encode(Auth::user(), true) !!};
    @else
      window.User= [];
    @endif
</script>

标签: phplaravelvuejs2

解决方案


推荐阅读