2016-02-15 247 views
4

說我要創造VUE路由器的AuthService繼續到下一個路線,就像例如在之前驗證當前會話:Laravel 5.1 + Vue.js - VUE路由器beforeEach 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 Tokens(JWT)的情況下爲Laravel 5.1使用此方法?
  • 對Laravel的SESSION_DRIVER有沒有「最佳實踐」方法,例如: Redis,對於這種情況?

我在網上搜索了很多,但從來沒有見過任何嘗試使用vue-router進行身份驗證而沒有JWT。

+0

無論如何,在瀏覽器中驗證會話有什麼意義? – gurghet

+0

你爲什麼反對使用智威湯遜? – funkenstein

+0

最佳做法是使用JWT或某種API令牌。 – Chandrew

回答

1

對於您的代碼,您想要將isLoggedIn()驗證檢查移入if語句。如果用戶登錄,則認證服務應該返回一個布爾值。在if中,您可以將用戶路由到適當的路徑。 beforeEach的作品類似於「在每條路線被處理之前我們應該做什麼?」所以你不需要在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() 
    } 
}) 

如果你想每一次,你isLoggedIn(以「在進行下一步之前路由驗證當前會話」)將需要每次打電話給你的登錄API。這通常不是最好的做法,因爲一旦你登錄了,爲什麼你需要再次檢查?這就是爲什麼代幣和智威湯遜存在的原因。登錄後,您會獲得令牌,您會記住此令牌並在即將到來的請求中發送令牌。

如何在不使用JSON Web的情況下爲Laravel 5.1使用此方法 令牌(JWT)?

不是技術上的JWT,您可以使用API​​令牌。 API令牌可以使用Laravel的str_random()函數生成。您需要爲每個用戶關聯1個令牌並保持令牌的唯一性。您可以將此令牌放在兩個位置:1.在參數的URL中?api_token = XXX 2.在「Authorization:Bearer XXX」的標題中。

如果你用頭去,在Vue.js,你會設置vue-resource這樣:

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

,然後所有請求現在包含了API令牌。

對Laravel的SESSION_DRIVER有沒有「最佳實踐」方法,例如:Redis,對於這種情況?

不是100%確定這裏是什麼意思,但是令牌被認爲是與API交互時的最佳實踐之一。您將令牌與每個Web請求進行交換,以便您不必每次都發送用戶名/密碼。