2017-02-27 93 views
0

我們假設有一個包含10個動態頁面(可能是表單)的應用程序,其中8個頁面受限(需要用戶在應用程序中登錄),2個頁面可供匿名用戶使用。Laravel Passport - Guest Token

我的前端應用程序是在Angular 2中,而後端API是在Laravel 5.4中開發的。我對JWT令牌更感興趣,發現laravel通過護照內置了支持。

問題:

  1. 我可以輕鬆地使用password grant tokens對於那些限制8頁。但是,如何將訪客令牌提供給我的Angular應用程序以訪問這2個頁面
  2. 如何限制訪客用戶訪問8受限制頁面的API功能。 (或者我該如何檢查,如果訪問用戶是客人或在API端登錄的用戶)

注:我不能使用Personal Access Tokens,因爲它可以讓我的應用程序 使用任何受限制的API功能。

+1

[Token Scopes](https://laravel.com/docs/5.4/passport#token-scopes)可能有助於限制用戶操作,因此您可以爲發送的訪客用戶創建一個「全局」訪問令牌到每個未經過身份驗證的用戶。 – Tek

+0

看起來有趣!我會探討更多。謝謝Tek! –

+0

你找到了什麼@SahilPurav?如果是這樣,請你分享一下你所做的來覆蓋這個客戶認證機制。我的情況與你類似。 –

回答

1

我在這裏使用JWT的方法。就我而言,我從我的API創建了JWT令牌。對於想要使用JWT功能的用戶,他們可以查看this package。我添加了名爲「Guest」的新有效載荷,併爲其分配了布爾值。在我的數據庫中,我添加了新用戶(稱爲匿名用戶)並將其存儲在我的laravel配置中。

接下來,我創建了新的中間件VerifyJwtToken,它驗證用戶,提取它的有效負載(使用base64_decode)並確定它是否爲guest。現在我所有的Laravel路線都在這個中間件裏面。

接下來,我將此令牌存儲在laravel會話以及localStorage(通過角度訪問它)中。

現在,我可以輕鬆地從localStorage訪問此令牌。在Angular端,我使用了Angular2Jwt包,它有助於提取令牌並識別它是客人還是登錄用戶。我還在Angular 4中創建了HTTP Interceptor,它在每個API請求中都將JWT標記添加爲標頭。

相關問題