Я реализовал этот сервер oauth http://bshaffer.github.io/oauth2-server-php-docs/
Он имеет реализацию Laravel: http://bshaffer.github.io/oauth2-server-php-docs/cookbook/laravel/.
Это руководство и код для маршрутов:
App::singleton('oauth2', function() {
$storage = new OAuth2\Storage\Pdo(array('dsn' => 'mysql:dbname=oauth2;host=localhost', 'username' => 'root', 'password' => 'root'));
$server = new OAuth2\Server($storage);
$server->addGrantType(new OAuth2\GrantType\ClientCredentials($storage));
$server->addGrantType(new OAuth2\GrantType\UserCredentials($storage));
return $server;
});
Route::get('private', function()
{
$bridgedRequest = OAuth2\HttpFoundationBridge\Request::createFromRequest(Request::instance());
$bridgedResponse = new OAuth2\HttpFoundationBridge\Response();
// fix for laravel
$bridgedRequest->request = new \Symfony\Component\HttpFoundation\ParameterBag();
$rawHeaders = getallheaders();
if (isset($rawHeaders["Authorization"])) {
$authorizationHeader = $rawHeaders["Authorization"];
$bridgedRequest->headers->add([ 'Authorization' => $authorizationHeader]);
}
if (App::make('oauth2')->verifyResourceRequest($bridgedRequest, $bridgedResponse)) {
$token = App::make('oauth2')->getAccessTokenData($bridgedRequest);
return Response::json(array(
'private' => 'stuff',
'user_id' => $token['user_id'],
'client' => $token['client_id'],
'expires' => $token['expires'],
));
}
else {
return Response::json(array(
'error' => 'Unauthorized'
), $bridgedResponse->getStatusCode());
}
});
Так он работает отлично. Теперь я хочу преобразовать эту функцию проверки в «частном» маршруте в промежуточное ПО, которое я мог бы применить к каждому необходимому маршруту. Я создал промежуточное ПО, используя
php artisan make:middleware AuthChecker
Добавил его в kernel.php и вставил в него код функции проверки. И сразу вылетела ошибка:
FatalErrorException in AuthChecker.php line 17:
Class 'Oauth2\HttpFoundationBridge\Request' not found
Так что, думаю, мне придется что-то «использовать», но поскольку я все еще новичок, я толком не знаю, что делать ...
Спасибо за вашу помощь!
[РЕДАКТИРОВАТЬ] содержимое промежуточного программного обеспечения в настоящее время выглядит следующим образом:
namespace App\Http\Middleware;
use Closure;
class OauthCheck {
public function handle($request, Closure $next)
{
$bridgedRequest = OAuth2\HttpFoundationBridge\Request::createFromRequest($request);
$bridgedResponse = new OAuth2\HttpFoundationBridge\Response();
// fix for laravel
$bridgedRequest->request = new \Symfony\Component\HttpFoundation\ParameterBag();
$rawHeaders = getallheaders();
if (isset($rawHeaders["Authorization"])) {
$authorizationHeader = $rawHeaders["Authorization"];
$bridgedRequest->headers->add([ 'Authorization' => $authorizationHeader]);
}
if (App::make('oauth2')->verifyResourceRequest($bridgedRequest, $bridgedResponse)) {
$token = App::make('oauth2')->getAccessTokenData($bridgedRequest);
return Response::json(array(
'private' => 'stuff',
'user_id' => $token['user_id'],
'client' => $token['client_id'],
'expires' => $token['expires'],
));
return $next($request);
}
else {
return Response::json(array(
'error' => 'Unauthorized'
), $bridgedResponse->getStatusCode());
}
}
}
Спасибо еще раз
AuthChecker.php
промежуточного программного обеспечения. - person Bogdan   schedule 29.05.2015\Oauth2\HttpFoundationBridge\Request
- person Jake Opena   schedule 29.05.2015OAuth2\HttpFoundationBridge\Request
, поскольку она не находится в вашем текущем пространстве имен. Он работает в вашей функции закрытия, потому что вы находитесь в глобальном пространстве имен. - person Jake Opena   schedule 29.05.2015use
лучше, потому что вам не нужно добавлять обратную косую черту, и вы можете повторно использовать ее в любом месте этого php-файла. - person Jake Opena   schedule 29.05.2015