我有以下设置: Laravel5和AnguarlJS 前端的Angular向Laravel5后端发送$ http请求。 前端位于test.example.com上,后端位于api.example.com上 我目前遇到的问题如下。 如果用户在其中有一个与我们的数据库匹配的令牌,则该站点在启动时进行测试。 如果不是,用户可以正常登录他的凭据。登录时,创建的令牌会成功保存到我们的数据库中,并且令牌应保存到会话项中。完成此操作后,再次检查用户是否正确登录但显然会话为空。 我们注意到Laravel为我们从AngularJS做的每个请求创建了一个新会话。原因可能是来自不同子域的JS请求是跨域请求,浏览器不会发送cookie以识别会话。这可能是原因。
显然我不知道这个问题的解决方案。
答案 0 :(得分:1)
我现在刚刚完成了以下工作,因为我今天工作了很多个小时。 我编辑了我的nginx配置,以便在子域上而不是在子文件夹上提供api。我的配置如下所示:
location /api {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
index index.php;
alias /srv/www/htdocs/api/public;
if (-f $request_filename) {
break;
}
## Check for file existing and if there, stop ##
if (-d $request_filename) {
break;
}
## If we get here then there is no file or directory matching request_filename ##
rewrite (.*) /api/index.php?$query_string;
## Normal php block for processing ##
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
答案 1 :(得分:0)
由于网络是无状态的,仅使用标题信息或域可能会导致中间人攻击。可以修改或复制来自客户端的任何内容,包括cookie数据。我在这里没有回答你的确切问题,但我建议采用不同的策略。
与api通信时使用的一种做法是使用具有安全请求的访问令牌;类似于oauth2客户端/服务器关系。通过向您的api发送XHR或CURL请求中的令牌,系统可以更好地验证与之通话的对象。否则,您可能会遇到欺骗经过身份验证的用户的人。