Laravel 5.1 + Vue.js - vue-router beforeEach AuthService

Laravel 5.1 + Vue.js - vue-router beforeEach AuthService

假设我想在 vue-router 中创建一个 AuthService 以在继续下一个路由之前验证当前会话,例如上例:

http://vuejs.github.io/vue-router/en/api/before-each.html

router.beforeEach(function ({ to, next }) {
  if (to.path === '/auth-required') {
    // return a Promise that resolves to true or false
    return AuthService.isLoggedIn()
  } else {
    next()
  }
})

我在网上搜索了很多但从未见过任何尝试在没有 JWT 的情况下使用 vue-router 验证会话。

对于您的代码,您希望将 isLoggedIn() 身份验证检查移动到 if 语句中。如果用户已登录,您的身份验证服务应该 return 一个布尔值。在 if 中,您会将用户路由到适当的路径。 beforeEach 的工作方式类似于 "What should we do before each route is processed?",因此您不需要 return if 语句中的真值。

router.beforeEach(function (transition) {
    if (transition.to.auth && !AuthService.isLoggedIn()) {
        // if route requires auth and user isn't authenticated
        transition.redirect('/login')
    } else {
        transition.next()
    }
})

如果您想每次 "validate the current session before proceeding to the next route",您的 isLoggedIn() 需要每次都调用您的登录名 API。这通常不是最佳做法,因为一旦登录,为什么需要再次检查?这就是令牌和 JWT 存在的原因。登录后,您将获得一个令牌,您记住这个令牌并在即将到来的请求中发送令牌。

How would one approach this for Laravel 5.1 use without using JSON Web Tokens(JWT)?

技术上不是 JWT,您可以使用 API 令牌。 API 代币可以用 Laravel 的 str_random() 函数生成。您将为每个用户关联 1 个令牌并保持令牌唯一。您可以将此标记放在 2 个位置:1. 在 URL 中用于参数 ?api_token=XXX 2. 在 header 中用于 "Authorization: Bearer XXX".

如果您要使用 headers,在 Vue.js 中,您需要这样设置 vue-resource

Vue.http.headers.common['Authorization'] = 'Bearer ' + token;

然后您的所有请求现在都包含 API 令牌。

Is there a "best-pratice" approach to SESSION_DRIVER in Laravel, ex. Redis, for this scenario?

不能 100% 确定您在这里的意思,但令牌被认为是与 API 交互时的最佳实践之一。您与每个 Web 请求交换令牌,这样您就不需要每次都发送 username/password。