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()
}
})
- 如何在不使用 JSON Web 令牌 (JWT) 的情况下为 Laravel 5.1 使用这种方法?
- 在 Laravel 中是否有 "best-pratice" 方法来实现 SESSION_DRIVER,例如。 Redis,针对这种场景?
我在网上搜索了很多但从未见过任何尝试在没有 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。
假设我想在 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()
}
})
- 如何在不使用 JSON Web 令牌 (JWT) 的情况下为 Laravel 5.1 使用这种方法?
- 在 Laravel 中是否有 "best-pratice" 方法来实现 SESSION_DRIVER,例如。 Redis,针对这种场景?
我在网上搜索了很多但从未见过任何尝试在没有 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。