@fsdolphin sure, but it's usually better to keep your controllers thin. They are just to send messages from one service to another and provide an http response. In this case the "logic" is checking if a user in logged in, which is achieved in two words by the Auth facade - this is absolutely fine in the view. The one thing you don't want is the same unnecessary conditional statement repeated throughout many controller methods, which is what the view composer is for: it feeds the views with any common data you want it to without cluttering your controllers.
If you want Vue to have access to user login status the easiest is to define a javascript variable in your view:
<script>var userIsLoggedIn = {{ Auth::check() }};</script>
although this isn't the most elegant as it's not nice to have blade tags in inline js.
An alternative is to have vue hit some api route that checks if the user is logged in but this seems overkill.
You could also check out this laracast on passing data to your javascript.
Update: I thought I'd add one alternative that is still simple yet slightly less nasty than embedded blade tags in your script tags, which requires inline javascript. This is covered in the above video.
Essentially define an html element like so:
<meta name="login-status" content="{{ Auth::check() }}">
<input type="hidden" id="login-status" data-login-status ="{{ Auth::check() }}">
If you use a meta tag it should be placed in the <head> section. The input tag is more flexible as it can go anywhere in the body. I've used a data attribute in this case but you could use value instead. For the case of being logged in the meta tag is probably the way to go as you can put this in your layout file and it'll be available everywhere.
Then just fetch the value in your js. E.g. using jQuery:
var isLoggedIn = $("meta[name=login-status]").attr('content'); // for the meta field method, or:
var isLoggedIn = $("input#login-status").data('login-status'); // for a hidden input
Now you can place this js logic in your external js file.