Jestem w stanie przetworzyć token, jeśli jest on w adresie URL jako ciąg lub występuje w nagłówku jako Authentication
z prefiksem tokenu z Bearer
, a ja chcę tylko móc go odebrać w nagłówku.Zapobiegam przetwarzaniu tokena przez Laravel API, jeśli jest on pod adresem URL w postaci zapytania o numer
To mój app/Http/Controllers/API/V1/AuthenticationController.php
file:
<?php
namespace app\Http\Controllers\API\V1;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Tymon\JWTAuth\Exceptions\JWTException;
use App\Models\Role;
use App\Models\User;
use App\Traits\Controllers\ApiParseBody;
use App\Traits\Controllers\ApiException;
use App\Traits\Controllers\ApiEvaluateCredentials;
use Tymon\JWTAuth\JWTAuth;
use App\Exceptions\Unauthorized\InvalidCredentials;
use App\Exceptions\InternalServerError\CouldNotCreateToken;
use Illuminate\Contracts\Hashing\Hasher;
class AuthenticationController extends Controller
{
use ApiParseBody;
use ApiEvaluateCredentials;
use ApiException;
/**
* The user implementation.
*
* @var User
*/
protected $user;
/**
* The role implementation.
*
* @var Role
*/
protected $role;
/**
* The hash implementation.
*
* @var Hash
*/
protected $hash;
/**
* The jwtauth implementation.
*
* @var JWTAuth
*/
protected $jwtauth;
/**
* Instantiate a new controller instance.
*
* @return void
*/
public function __construct(
User $user,
Role $role,
Hasher $hash,
JWTAuth $jwtauth
) {
$this->middleware('jwt.auth', ['except' => ['signin', 'signup']]);
$this->user = $user;
$this->role = $role;
$this->hash = $hash;
$this->jwtauth = $jwtauth;
}
/**
* Signin user.
*
* @param Request $request
*
* @return Response
*/
public function signin(Request $request)
{
$attributes = array('email', 'password');
$credentials = $this->parseBody($attributes, $request);
$this->validateCredentialsArePresent($credentials);
try {
if (! $token = $this->jwtauth->attempt($credentials)) {
throw new InvalidCredentials('invalid_credentials');
}
} catch (JWTException $e) {
throw new CouldNotCreateToken('could_not_create_token');
}
return response()->json(compact('token'));
}
/**
* Signup user. Default role is 'common'.
*
* @param Request $request
*
* @return Response
*/
public function signup(Request $request)
{
$attributes = array('email', 'password');
$params = $this->parseBody($attributes, $request);
$this->validateCredentialsArePresent($params);
$this->evaluateCredentials($params);
$credentials = array(
'email' => $params['email'],
'password' => $this->hash->make($params['password'])
);
$this->validateUserAlreadyExists($credentials);
$commonRole = $this->role->where('name', 'common')->firstOrFail();
$user = new User($credentials);
$commonRole->users()->save($user);
return response()->json(array('message' => 'User signed up.'));
}
}
To mój config/cors.php
file:
<?php
return [
'defaults' => [
'supportsCredentials' => false,
'allowedOrigins' => [],
'allowedHeaders' => [],
'allowedMethods' => [],
'exposedHeaders' => [],
'maxAge' => 0,
'hosts' => [],
],
'paths' => [
'v1/*' => [
'allowedOrigins' => ['*'],
'allowedHeaders' => [
'Origin',
'Content-Type',
'Accept',
'Authorization',
'X-Request-With'
],
'allowedMethods' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
'exposedHeaders' => ['Authorization'],
'maxAge' => 3600,
],
],
];
następujące obrazy pokaże, co mam na myśli, na wszelki wypadek, że nie było jasne, z tym, co Próbuję przekazać.
Ten pokazuje, w jaki sposób używam Postmana do wykonywania GET do aplikacji na Heroku. widać, że używam nagłówek Authorization
:
i co chcę, aby zapobiec jest, aby uzyskać ten sam wynik, wysyłając token w URL w następujący sposób:
Nie wiem nawet, czy to możliwe, więc naprawdę doceniłbym wszelkie wskazówki w tej sprawie.
spojrzeć https://laracasts.com/discuss/channels/general-discussion/l5- unikając-csrf-middleware-na-api-post-trasach? page = 2 – Brian
@Brian dziękuję, jestem na tym – nisevi
@Brian Próbowałem co t Hej wspomnieć w poście, ale nadal mam takie samo zachowanie. – nisevi