There are many posts out there and StackOverflow answers, but none has helped me solve this problem.
I am using Laradock for a Laravel app on a production server. The Laravel version is 7.24.0 on Nginx and PHP 7.4.
However, if I test the email verification via mailtrap, I get this error
403 | Invalid signature.
I already have executed php artisan key:generate
and I can see it in my .env file:
APP_NAME="The cool app"
APP_ENV=production
APP_KEY=base64:S1ABrOXZ1ldmYqfjBvZfupwBNM+m10MWINqEvj/eGbg=
APP_DEBUG=true
APP_URL=https://my-domain.com
Originally, the Nginx default configuration is:
server {
listen 80;
listen [::]:80;
# For https
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server ipv6only=on;
# ssl_certificate /etc/nginx/ssl/default.crt;
# ssl_certificate_key /etc/nginx/ssl/default.key;
server_name my-domain.com;
root /var/www/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
#location /.well-known/acme-challenge/ {
# root /var/www/letsencrypt/;
# log_not_found off;
#}
}
I have tried that one as well:
try_files $uri $uri/ /index.php?$query_string;
as suggested here.
But nothing works, except in my local environment.
A sample of the URL is.
https://my-domain.com/email/verify/3/28d707536a36800a7cfaaaa5f5e29eca3ac2b38a?expires=1597101566&signature=2685421462a1756e38bee693801f11e2f2ed6645e3d0ad361413a758b9ca6fab
I checked both the "verify" email button and the web browser URLs and they look the same.
Additionally, I have just tried
$ php artisan config:cache
But no luck :/ I still get that 403 | Invalid signature
error
Can anyone shed some light on this? Otherwise, how to debug this?
Solved! Hurra I have applied what is said in this GitHub issue answered by yawmanford:
Inside AppServiceProvider.php
public function boot()
{
if($this->app->environment('production'))
{
\URL::forceScheme('https');
}
}
Then in TrustProxies.php
protected $proxies = '*';
Finally, inside the workspace
container I ran:
artisan config:cache
And that did the trick!
What do you think?
php artisan config:cache
– Zygo