2015-03-12 22 views
12

Tôi có một chương trình phụ trợ Laravel 5 gửi một mã thông báo jwt như một câu trả lời json khi đăng nhập với jwt-auth.Thêm vai trò người dùng vào jwt, laravel 5 jwt-auth

Bây giờ tôi muốn thêm vai trò người dùng đến thẻ JWT rằng laravel gửi, tôi đã thử cách sau:

Đây là bộ điều khiển hiện tại của tôi

<?php 
namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use JWTAuth; 
use Tymon\JWTAuth\Exceptions\JWTException; 
use Illuminate\Database\Eloquent\Model; 
use App\User; 

class AuthenticateController extends Controller 
{ 
    public function authenticate(Request $request) 
    { 
     // grab credentials from the request 
     $credentials = $request->only('email', 'password'); 
     $user = User::where('email', '=', $credentials['email'])->first(); 
     $customClaims = ['role' => $user->role]; 

     try { 
      // attempt to verify the credentials and create a token for the user 
      if (! $token = JWTAuth::attempt($credentials, $customClaims)) { 
       return response()->json(['error' => 'invalid_credentials'], 401); 
      } 
     } catch (JWTException $e) { 
      // something went wrong whilst attempting to encode the token 
      return response()->json(['error' => 'could_not_create_token'], 500); 
     } 
     // all good so return the token 
     return response()->json(compact('token')); 
    } 
} 
?> 

Có cách nào sạch hơn để làm điều này ?

+0

JWT cho php là tài liệu không hợp lệ. Để làm cho một hệ thống đăng nhập/đăng xuất đơn giản là đau đớn! Xem câu hỏi của tôi về nó. – Maykonn

+0

Tôi đang tìm kiếm điều tương tự, bạn có tìm thấy giải pháp nào không? – kitensei

+0

Tôi đã đi với các giải pháp trên, ngay cả khi nó là một trong nhiều truy vấn. Không thể tìm thấy giải pháp sạch hơn – RVandersteen

Trả lời

2

Bạn hiện đang truy vấn người dùng hai lần, sau khi sử dụng email cho mục đích nhận vai trò và người thứ hai trong phương thức jwt::attempt(). Tôi sẽ đề xuất giảm truy vấn chỉ một nhưng thực hiện xác thực {Auth :: try ($ credientials)} và sau đó chuyển người dùng đã truy xuất vào phương thức JWT::fromUser() cùng với xác nhận quyền sở hữu tùy chỉnh. do đó

JWT::fromUser($user,['role' => $user->role]) 
1

Thật kỳ lạ, chỉ định một số $ customClaims làm tham số thứ hai cho phương pháp thử () thực sự hoạt động đối với tôi.

Tuy nhiên, bạn đã thử sử dụng mặt tiền JWTFactory? Nó cho phép bạn tạo mọi loại mã thông báo mà bạn muốn.

Bạn có thể xem thêm thông tin tại đây: JWT-Auth Creating Tokens Page.

installation guide suggests, đừng quên thêm nó làm Mặt tiền trong khi cài đặt JWT-Auth!

Hy vọng điều đó sẽ hữu ích!

0

Dường như không có cách nào rõ ràng hơn trong phiên bản ổn định hiện tại của JWTAuth [0.5.9].

Hãy nhìn vào các vấn đề sau #89#108

Như tác giả đã chỉ ra trong ý kiến ​​của mình sẽ có những cải tiến trong phiên bản tiếp theo của mình bao gồm vấn đề này. Bạn có thể xem chi nhánh phát triển của mình.

+0

giúp anh ta bằng cách chia sẻ một số mã exampl – Mostafiz

Các vấn đề liên quan