我正在本地开发laravel-sail/docker环境,并使用http://localhost.正在尝试测试hCaptcha。无法在本地执行此操作。有人建议更改我的/etc/hosts文件:
# cat hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.21.0.7 2d23274c42bb
#
将hosts文件中的"localhost"更改为"test.anydomain.com",然后我就可以测试captcha服务了。
如果我这样做,我是否可以通过使用url"test.anydomain.com"访问我的本地测试网站,也就是说,使用一些任意的网站域名?有更好的方法来实现这一点吗?你能更改Laravel.env文件中的APP_URL吗?或者容器能够获取env('APP_URL'(变量值吗?
当我尝试编辑/etc/hosts文件时,我发现docker容器没有安装像Vim或Nano这样的文本编辑器。我想我可以使用[sed]命令将文本从本地主机更改为域名,但我不想弄乱我的容器。(我还不知道码头集装箱的来龙去脉(。
当尝试使用sed更改文本时,我得到以下结果:
sed -i 's/127.0.0.1 localhost/127.0.0.1 test.rec4life.com/g' /etc/hosts
sed: cannot rename /etc/sedIABEfa: Device or resource busy
有一点相关的是,我尝试使用Beyond Code的expose.dev服务,在那里我可以通过互联网共享我的本地机器。在启动公开服务并将APP_URL更改为具有公开URL的共享URL之后。我可以分享主页,但如果你点击主页中的链接,你就会被送回普通的本地主机。
不确定这两者(hCaptcha和exposure共享(是否是相关问题。
希望答案就在那里。
我已经用Google ReCAPTCHA完成了这项工作,它看起来毫无效果。我们使用Interia和ReactJS,但它的工作原理应该类似,这样您就可以使用Sail开发环境对其进行测试,然后将其部署到生产服务器上。
1. Install google recaptcha using Compose into your projects vendor directory.
2. In your reCAPTCHA domains setting, ensure you specify:
localhost
127.0.0.1
DockerIP (e.g. 172.18.0.1)
your.domain.com
3. In your app, make sure you pass the site keys properly
ideally set in the .env file to the google javascript call here is an example:
app.blade.php
<script src="https://www.google.com/recaptcha/api.js?render=sitekey" defer></script>
grecaptcha.ready(function() {
grecaptcha.execute('xxxxxxxxxsitekeyxxxxx', {action: 'myaction'}).then(function(token) {.........
4. In your controller, verify like this:
$recaptcha = new ReCaptchaReCaptcha('secretkey');
$resp = $recaptcha->setExpectedAction('summaryquery')
->setScoreThreshold(0.5)
->verify($data['g-recaptcha-response'], $this->getIp());
//error_log(print_r($resp,true));
if ($resp->isSuccess()) {
// Verified!
.........