Maison > Questions et réponses > le corps du texte
Je suis nouveau dans le développement d'applications Shopify. J'ai développé une application en utilisant des modèles php fournis par shopify. Il utilise Laravel et React. Il s'agit de https://github.com/Shopify/shopify-app-template-php/tree/cli_third
Lorsque j'exécute npm run dev, l'application s'exécute dans le magasin de développement.
J'ai ensuite déployé mon application sur un serveur AWS en utilisant un domaine (ex : sub.mydomain.com).
Ensuite, j'ai installé l'application dans le magasin.
La page est en cours de rendu dans l'application. Mais j'obtiens une erreur 500 lors d'une requête GET ou POST.
Après le débogage, j'ai trouvé cette ligne de code
$session = Utils::loadCurrentSession($request->header(), $request->cookie(), $isOnline);
Une exception est levée, l'erreur est :
ShopifyExceptionMissingArgumentException {#334 #message: "Missing Authorization key in headers array" #code: 0 #file: "/var/www/html/shopify-project/web/vendor/shopify/shopify-api/src/Auth/OAuth.php"
Mais dans l'entête de la demande, il y a un code d'autorisation :
:authority: sub.mydomain.com :method: GET :path: /api/view-id :scheme: https accept: */* accept-encoding: gzip, deflate, br accept-language: en-US,en;q=0.9,ne;q=0.8 authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczpcL1wvcW9kZWFuYWx5dGljcy5teXNob3BpZnkuY29tXC9hZG1pbiIsImRlc3QiOiJodHRwczpcL1wvcW9kZWFuYWx5dGljcy5teXNob3BpZnkuY29tIiwiYXVkIjoiNDBhYWM4OWM0Yzc4YmJlMjE5ZDBmMWY3NWExZjJhZTciLCJzdWIiOiI4NDM4NjcwOTc2MSIsImV4cCI6MTY1NzgxOTUyOSwibmJmIjoxNjU3ODE5NDY5LCJpYXQiOjE2NTc4MTk0NjksImp0aSI6ImRhZTI1ZjViLWIxODgtNGZkOS05MjcwLWNkOWNlODQ3MDIyZCIsInNpZCI6IjJmNTJkOTcxNTgxMDc5YmYxYmI0NDNlZWY5MGM2YTI2OGEyMmRkY2ZlZmRhMDc2YzE4NTM5OGY3YzU4ZDJmYTgifQ.ASJOsmBb4kMZz-QiRzg60pzvwDaj4w5DbZRO8mcWt1U cache-control: no-cache pragma: no-cache referer: https://sub.mydomain.co/setup? hmac=633d1f9577273c7e7281dba9ca206037100dckjlkjb45ac7271674691acc6f7e6b3da&host=cW9kZWFuYWx5dGljcy5teXNob3BpZ54654nkuY29tL2FkbWlu&locale=en&session=78bbfd9e29b55c907762eba75a4a759f0691572c1f4661500f0d6d4ff6a54d86&shop=mystore.myshopify.com×tamp=1657819465 sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="99", "Google Chrome";v="99" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Linux" sec-fetch-dest: empty sec-fetch-mode: cors sec-fetch-site: same-origin user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36 x-requested-with: XMLHttpRequest
Je pense que cela est dû à la demande envoyée par l'iframe. Quelqu'un peut-il me dire ce que je dois faire pour autoriser cette demande ?
P粉9373822302024-01-11 13:48:22
J'ai trouvé la solution ! En fait, le Modèle Laravel que j'utilise n'a pas de fichier .htaccess dans le dossier public. Je dois l'ajouter manuellement.
Lors de l'ajout du fichier .htaccess, il ne contient que le code suivant :
RewriteEngine on RewriteCond !^(index.php|resources|robots.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/ [L,QSA]
Et le code d'autorisation n'atteint pas l'application Lararvel.
J'ai dû ajouter ce code dans le fichier .htaccess :
RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]Le code final dans le fichier
.htaccess est :
RewriteEngine on RewriteCond !^(index.php|resources|robots.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/ [L,QSA] RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Ensuite, toutes les demandes commencent à fonctionner.