How to check in a Vue component if a user is authenticated in Laravel?

前端 未结 4 1730
醉酒成梦
醉酒成梦 2021-02-04 07:49

As the title states, I\'m a little confused how I would tackle a method in my Vue Component with if/else statement based on if the user is logged in and authenticated with Larav

相关标签:
4条回答
  • 2021-02-04 08:28

    I'm working with laravel 7+ and it doesn't need to send Auth::user() via controller Just call it from your laravel blade template file like below

    your-template-name.blade.php

    @if (Auth::check())
         <script>window.authUser={!! json_encode(Auth::user()); !!};</script>
    @else
         <script>window.authUser=null;</script>
    @endif
    

    inside YourComponent.vue, store authUser like this:

    <script>
        export default {
             data() {
                  return {
                       authUser: window.authUser
                  }
              },
    
              created() {
                    console.log(this.authUser);
              },
    
              methods: {
                 yourMethodName() {
                      console.log(this.authUser);
              }
          }
     <script>
    
    0 讨论(0)
  • 2021-02-04 08:33

    Use axios interceptors. You intercept the access denied http response code and then act accordingly.

    window.axios.interceptors.response.use(function (response) {
        return response;
    }, function (error) {
        if (419 === error.response.status) {
             location.reload();
        } else {
            //Something else you want to do or do nothing
        }
    });
    
    0 讨论(0)
  • 2021-02-04 08:36

    Usually from your controller, you pass the authenticated user object into the view which will then be stored in a javascript variable

    Controller:

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

    You will know if a user is authenticated if it returns an object or null where null means no user is authenticated.

    In your blade, assign the auth_user into a javascript variable:

    <script>
        window.auth_user = {!! json_encode($auth_user); !!};
    </script>
    

    your vuex store object should atleast look like this:

    {
        state: {
            user: null
        },
        mutations: {
            setAuthUser(state, user) {
                state.user = user;
            }
        },
        getters: {
            isLoggedIn(state) {
                return state.user !== null;
            }
        }
    }
    

    Then in your Vue root component, get the auth_user and save it into the store:

    <script>
        export default {
    
            mounted() {
                this.$store.commit('setAuthUser', window.auth_user);
            }
    
        }
    </script>
    

    You now basically have a getter called this.$store.getters.isLoggedIn that you can use in your application for checking if a user is currently logged in.

    e.g:

    0 讨论(0)
  • 2021-02-04 08:40

    Putting a script within blade file will throw Vue Warning. Let me answer "How to check in a Vue component if a user is authenticated in Laravel" and leave you with your Vuex complexity. Also this method is simpler.

    So, in your controller:

    public function index()
    {
        return view('index')->with('auth_user',  auth()->user());
    }
    

    In your blade(main.blade.php):

    <div class="container">
        <example-component :auth_user='@json($auth_user)'></example-component>
    </div>
    

    In your vue-component, get your props(ExampleComponent.vue):

    <script>
    export default {
    
      props: ['auth_user'],
    
      created () {
        console.log(this.auth_user)
    
      }
    }
    </script>
    

    Returns null if user is not logged in

    0 讨论(0)
提交回复
热议问题