Passar o token de um controlador AngularJS a uma API Laravel

votos
4

Eu estou tentando passar o token que eu tenho no meu controlador Java Script para autenticar uma API em Laravel. A partir dos cabeçalhos de meu controlador, eu definir uma '' Autorização ':' portador '+ $ scope.token a ser enviado para o API Mas, infelizmente, eu estou encontrando esse erro.:

Token_not_provided

Rota:

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

Estou usar JWTAuth.

Meu API Controlador:

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);
}

Controlador angular:

(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);
}

retorno de erro:

digite

Publicado 20/10/2018 em 14:03
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

Se portador não está funcionando, então você tem que enviar token com dados de parâmetros

Não nos cabeçalhos. i também têm enfrentado esse problema e fixo através do envio de token com parâmetro corpo.

Tente enviar com parâmetros corpo.

Se isso não funcionar, então verifique, também, com a mudança de código de middleware

aqui é uma linha que você precisa mudar

public function handle($request, Closure $next)
{
    try{
        $user = JWTAuth::toUser($request->input('token'));
        // this will get token from body parameter
Respondeu 30/10/2018 em 15:11
fonte usuário

votos
0

A maneira como você construir o pedido parece ser bom. Parece que o erro vem do servidor API que não recebe o token.

Se você estiver executando seu aplicativo PHP usando Apache, então você deve ter um olhar para esta questão e a resposta aceita .

O Apache não serve corretamente o cabeçalho de autorização para as aplicações. Uma regra dedicado tem que ser definido em você .htaccess para obtê-lo.

Respondeu 29/10/2018 em 09:29
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more