如果用户在Laravel中进行了身份验证,如何签入Vue组件?

Jqu*_*ons 7 authentication laravel vue.js vuex

正如标题所述,我有点困惑,如果用户登录并使用Laravel的Auth外观进行身份验证,我将如何使用if/else语句处理我的Vue组件中的方法.如果用户登录,我正在制作各种Axios请求,我需要允许/禁止这些请求.

我有VUEX设置,并且认为我可以以某种方式使用本地存储来获得isLoggedin的状态,例如与Laravel一起使用.但我不知道这是否是正确的方法,或者安全且可能是Laravel已经存储了它的身份验证.那么我可以直接在Vue中访问吗?

我不认为这里的一些不干净的解决方案是最好的 - https://laracasts.com/discuss/channels/vue/hide-button-if-user-is-logged-with-laravel-and-vuejs

我找不到任何这样的例子:(

Jul*_*yag 9

通常从您的控制器,您将经过身份验证的用户对象传递到视图中,然后将其存储在javascript变量中

控制器:

public function index()
{
    return view('index', [
        'auth_user' => Auth::user()
    ]);
}
Run Code Online (Sandbox Code Playgroud)

您将知道用户是否在返回对象时进行了身份验证,或者null,其中null表示没有用户通过身份验证.

在您的刀片中,将其分配auth_user到javascript变量中:

<script>
    window.auth_user = {!! json_encode($auth_user); !!};
</script>
Run Code Online (Sandbox Code Playgroud)

你的vuex商店对象至少应该是这样的:

{
    state: {
        user: null
    },
    mutations: {
        setAuthUser(state, user) {
            state.user = user;
        }
    },
    getters: {
        isLoggedIn(state) {
            return state.user !== null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的Vue根组件中,获取auth_user并将其保存到商店中:

<script>
    export default {

        mounted() {
            this.$store.commit('setAuthUser', window.auth_user);
        }

    }
</script>
Run Code Online (Sandbox Code Playgroud)

您现在基本上有一个getter调用this.$store.getters.isLoggedIn,您可以在您的应用程序中使用它来检查用户当前是否已登录.

例如:

  • 工作得很好.作为参考,我不得不使用`window.auth_user = {!! json_encode($ auth_user)!!};`此外,必须在Vue根主组件之前插入刀片脚本(在我的情况下标题不是页脚) (2认同)
  • 抱歉提问晚了。如果用户已注销,但不刷新页面怎么办?例如,如果会话结束。 (2认同)