Передайте токен контроллера AngularJs в Laravel API - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь передать токен, который есть в моем контроллере Java Script, для аутентификации в API в Laravel.Из заголовков моего контроллера я определяю «Authorization»: «Bearer» + $ scope.token «для отправки в API. Но, к сожалению, я сталкиваюсь с этой ошибкой:

»token_not_provided "

Маршрут:

Route::get('/members', 'PessoaController@index')->middleware('jwt.auth');

Я использую JWTAuth.

Мой контроллер API:

use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;
use App\User;
use Illuminate\Support\Facades\DB;
use App\Http\Requests\PessoaRequest;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Facades\JWTAuth;

class PessoaController extends Controller
{

protected $user;

    public function __construct(\Illuminate\Http\Request $request)
{
    $header = $request->header('Authorization');

    return response([
        'status' => 'success'
    ]) ->header('Authorization', $header);
}

Угловой контроллер:

(function() {
 app.controller('MemberController', [
'$scope', '$rootScope', 'AppConfig', '$http',
function($scope, $rootScope, AppConfig, $http) {
  var vm = this;
  $rootScope.page.title = 'SEC BASE';

  $rootScope.authenticated = true;
  $scope.token = $rootScope.user.remember_token;
   getMembers();

    // Obtem a listagem de todos os usuarios
  function getMembers() {
      Loading.show();
    $http({
        headers: {
            'Content-Type' : 'application/json',
            'Authorization' : 'Bearer ' + token
        },
        method: 'GET',
        url: AppConfig.ApiUrl + 'members'
    }).then( response => {
      // console.log(response);
      $scope.members = response.data;
    }).finally(Loading.hide)
        .catch(function(err) {
            console.log(err);
        });
  }
  }
  ]);
})();

Handler.php:

use Exception;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Tymon\JWTAuth\Facades\JWTAuth;
public function render($request, Exception $exception)
{
    // detect instance
    try {
        $user = JWTAuth::parseToken()->authenticate();
    } catch (Exception $e) {
        if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException){
            return $this->respondWithError("Token is Invalid");
        }else if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException){
            return $this->respondWithError(['error'=>'Token is Expired']);
        }else{
            return $this->respondWithError(['error'=>'Something is wrong']);
        }
    }
    return $next($request);
}

Ошибка возврата:

enter image description here

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Если Bearer не работает, вы должны отправить токен с данными параметра

Не в заголовках.Я также столкнулся с этой проблемой и исправил ее, отправив токен с параметром тела.

Попробуйте отправить с параметрами тела.

Если это не помогло, проверьте также и изменение кода промежуточного программного обеспечения

здесь 1 строка, которую нужно изменить

public function handle($request, Closure $next)
{
    try{
        $user = JWTAuth::toUser($request->input('token'));
        // this will get token from body parameter
0 голосов
/ 29 октября 2018

То, как вы строите запрос, выглядит хорошо.Похоже, что ошибка исходит от сервера API, который не получает токен.

Если вы работаете с PHP-приложением, используя Apache, вам следует взглянуть на этот вопрос и принятый ответ .

Apache неправильно обслуживает заголовок авторизации для приложений.Вам нужно установить специальное правило .htaccess, чтобы получить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...