JWT Auth 令牌适用于 Homestead,但不适用于生产服务器
Posted
技术标签:
【中文标题】JWT Auth 令牌适用于 Homestead,但不适用于生产服务器【英文标题】:JWT Auth token works in Homestead but not on production server 【发布时间】:2016-01-06 12:06:03 【问题描述】:所以这就是交易。我有一个带有“satellizer”和“angular-jwt”的ionic 应用程序,它与带有barryvdh/laravel-cors 和tymondesigns/jwt-auth 的Laravel5 后端通信。在Homestead 结合使用离子服务时运行此组合效果很好。创建一个身份验证令牌并将其存储在 localStorage 中,并使用 Laravel 进行验证。此请求如下所示:
[IONIC SERVE] http://192.168.1.54:8100/#/auth
[POST] http://192.168.10.10/api/v1/authenticate?email=[email]&password=[password]
Returns [the_token]
[GET] http://192.168.10.10/api/v1/authenticate/user?token=[the_token]
Returns the user object from Laravel
只要我将 api url 更改为我的实时服务器
[POST] http://domaintomyvps.com/api/v1/authenticate?email=[email]&password=[password]
Returns [the_token]
[GET] http://domaintomyvps.com/api/v1/authenticate/user?token=[the_token]
Returns "error":"token_not_provided"
身份验证工作正常,并返回了一个令牌。但是在发送获取请求时,我收到错误“token_not_provided”。
然后奇怪的事情发生了。当尝试来自 Chrome Postman 的相同请求时,令牌会验证并返回用户对象。
我的家园在 VirtualBox 和 Ubuntu 的 nginx 中作为 Vagrant 运行。我的生产服务器是 Debian 和 Apache 在 VPS 上。 Laravel 安装在设置和键方面是相同的。数据库完全相同(mysqldump)并且由于Postman创建了成功的结果而工作。
谁能指导我正确的方向或遇到同样的问题?您需要有关设置或代码的更多信息吗?
【问题讨论】:
请求是跨域的吗?如果很可能是 CORS 问题 是的。这就是为什么安装包 barryvdh/laravel-cors 以访问服务器的原因。发布电子邮件和密码时的第一个身份验证是跨域工作。我的本地 virtualbox 和 ionic 之间的请求也是 CORS 并且由于 CORS 包而工作正常 【参考方案1】:这解决了我的问题。 将以下内容添加到我的 apache .htaccess disable apache 以从请求中删除 auth 标头。我在以下位置找到了这个答案:following thread
RewriteCond %HTTP:Authorization ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
【讨论】:
上帝保佑你善良的人以上是关于JWT Auth 令牌适用于 Homestead,但不适用于生产服务器的主要内容,如果未能解决你的问题,请参考以下文章
PHP Slim 4 - 使用 firebase JWT 令牌授权 api 请求