Php 野狗Api Laravel 5.1上的JWT认证配置*
我正在使用带有Dingo Api和JWT Auth的Laravel 5.1.33,已经安装了所有这些,但是现在我很困惑,如果我想验证一个用户,那么该用户在没有先登录的情况下无法访问某些路由,我是否需要做更多的工作 我在api.php上修改了以下代码:Php 野狗Api Laravel 5.1上的JWT认证配置*,php,laravel,jwt,dingo-api,Php,Laravel,Jwt,Dingo Api,我正在使用带有Dingo Api和JWT Auth的Laravel 5.1.33,已经安装了所有这些,但是现在我很困惑,如果我想验证一个用户,那么该用户在没有先登录的情况下无法访问某些路由,我是否需要做更多的工作 我在api.php上修改了以下代码: 'auth' => [ 'jwt' => 'Dingo\Api\Auth\Provider\JWT', ], 当它出现在这里时,我很困惑,在哪里添加这个代码,它到底做了什么 app('Dingo\Api\Auth\Au
'auth' => [
'jwt' => 'Dingo\Api\Auth\Provider\JWT',
],
当它出现在这里时,我很困惑,在哪里添加这个代码,它到底做了什么
app('Dingo\Api\Auth\Auth')->extend('jwt', function ($app) {
return new Dingo\Api\Auth\Provider\JWT($app['Tymon\JWTAuth\JWTAuth']);
});
我读过dingo/api对tymondesigns/jwt auth的内置支持,这是否意味着我不需要编写任何身份验证代码,或者这意味着什么
有谁能告诉我,我是否必须修改当前的AuthController,目前的情况如下:
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
class AuthController extends Controller
{
/*
|--------------------------------------------------------------------------
| Registration & Login Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users, as well as the
| authentication of existing users. By default, this controller uses
| a simple trait to add these behaviors. Why don't you explore it?
|
*/
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
/**
* Create a new authentication controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest', ['except' => 'getLogout']);
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}
,您可以参考它的路线和控制器
namespace App\Http\Controllers\Api;
use App\Http\Requests\Request;
class TestController extends ApiController
{
public function index(Request $request)
{
$this->auth; # Here Auth is the logged in user object
# to return pagination
return $this->response->paginator(User::paginate(10), new
UserTransformer());
# to return a single Model instance
return $this->response->item($user, new UserTransformer());
# to return error. Others error methods as well
return $this->response->errorInternal('Error Message');
# to return a custom array
return $this->response->array([
'status' => 200,
'message' => 'Msg'
]);
}
需要添加一些方法,例如
登录:用户登录以获取令牌
刷新令牌:当令牌无效时
以下是步骤:
第1步:
打开App\Providers\AuthServiceProvider。将以下代码粘贴到启动方法中
app('Dingo\Api\Auth\Auth')->extend('jwt', function ($app) {
return new \Dingo\Api\Auth\Provider\JWT($app['Tymon\JWTAuth\JWTAuth']);
});
步骤2
创建一个身份验证控制器,该控制器生成并返回身份验证令牌
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
class AuthenticateController extends ApiController
{
public function authenticate(Request $request)
{
// grab credentials from the request
$credentials = $request->only('email', 'password');
try {
// attempt to verify the credentials and create a token for the user
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'invalid_credentials'], 401);
}
} catch (JWTException $e) {
// something went wrong whilst attempting to encode the token
return $this->response->errorInternal('Could not create token');
}
return $this->response->array([
'token' => $token,
'expire_in' => \Carbon\Carbon::now()->addMinutes(config('jwt.ttl'))->format('Y-m-d H:i:s')
]);
}
}
第三步:
创建一个根Api控制器,如下所示
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Dingo\Api\Routing\Helpers;
class ApiController extends Controller
{
use Helpers;
}
步骤4
现在您已经准备好使用Dingo JWT auth了。只需从ApiController类扩展控制器类。它必须是所有Api控制器的父级
namespace App\Http\Controllers\Api;
use App\Http\Requests\Request;
class TestController extends ApiController
{
public function index(Request $request)
{
$this->auth; # Here Auth is the logged in user object
# to return pagination
return $this->response->paginator(User::paginate(10), new
UserTransformer());
# to return a single Model instance
return $this->response->item($user, new UserTransformer());
# to return error. Others error methods as well
return $this->response->errorInternal('Error Message');
# to return a custom array
return $this->response->array([
'status' => 200,
'message' => 'Msg'
]);
}
}尝试对答案添加更多解释,避免提供链接,因为链接可能在一段时间后不可用github示例项目似乎是为oauth而不是JWT实施的