【问题标题】:How to implement Auth::check() in laravel and vuejs如何在 laravel 和 vuejs 中实现 Auth::check()
【发布时间】:2020-01-29 01:52:40
【问题描述】:

如何检查用户登录?如果用户未登录,则用户无法提交cmet,需要先重定向到登录页面进行登录。

我试过了,还是不行

【问题讨论】:

  • 在 vuejs 中吗?
  • @KamleshPaul 是的,检查 vuejs。但是对于控制器,我使用了 laravel
  • 以及您使用哪个身份验证进行 vuejs 登录。?
  • @KamleshPaul 不,登录时我使用 laravel,但表单评论我使用组件 vue
  • 然后当用户输入评论时让他们输入但是当评论命中服务器时你可以检查。如果用户未登录,您可以发送响应 false 并且在 vuejs 内部,如果响应为 false 则可以发送 window.location.href="login"

标签: laravel vue.js vuejs2


【解决方案1】:

使用身份验证中间件保护您的路由:

Route::get('comments', function () {
    // Only authenticated users may enter...
})->middleware('auth');

或作为一个团体:

    Route::group(['middleware' => ['auth']], function () {
        Route::post('comments', 'CommentController@store');
    });

然后,laravel 会自动将未经身份验证的用户重定向到您的“登录”命名路由。 (或者在app/Http/Middleware/Authenticate.php的redirectTo()方法中指定自定义路由)

通过 vue 中的 ajax 调用,您可以侦听 403 响应代码,然后将用户重定向到登录 url。但是如果你把主应用的路由放在 auth 中间件中,你就不用担心这部分了,因为 laravel 会自动重定向用户。

【讨论】:

    【解决方案2】:

    这真的取决于你如何构建你的应用程序,如果它是一个 spa,你应该使用 laravel airlock 或 passport 之类的东西,而不是默认的登录逻辑。

    如果这是一个多页面应用程序,您应该包含一个简单的身份验证中间件。

    这样你就可以简单地告诉你的刀片文件哪些元素应该被包含或不这样:

    @auth
      <h1>Logged in</h1>
    @endauth
    

    你可以有一个简单的路由来检查你是否登录,根据结果你可以做一些魔法。

    您的路线:

    use Auth;
    
    Route::get('is-auth', function () {
        $auth = Auth::user();
        return $auth;
    });
    

    现在您将用户保存到全局窗口对象。

    总的来说,你可以做这样的事情,但我不推荐下面的想法。

    然后你可以向服务器发送一个请求,我不推荐这样做,并且无论你是否登录都会得到结果。

    axios.get('is-auth')
       .then(response => {
         if(response.data) {
            console.log("not logged in");
         }
         console.log("logged in");
       });
       .catch(error => console.log("error");
    

    【讨论】:

      猜你喜欢
      • 2020-09-05
      • 2014-11-19
      • 2018-12-19
      • 2018-09-08
      • 2015-04-28
      • 2018-01-14
      • 2014-08-31
      • 2020-04-20
      • 2016-07-19
      相关资源
      最近更新 更多