我有以下设置:前端的Laravel5和AnguarlJS角将$http请求发送到Laravel5后端。前端在test.example.com上,后端在api.example.com上,我现在遇到的问题如下。该站点在启动时测试用户是否有一个开放会话,如果它在其中有一个令牌,这与我们的数据库相匹配。如果没有,用户可以像平常一样使用他的凭据登录。当登录到创建的令牌时,将成功地保存到我们的数据库中,并且应该将令牌保存到会话项中。完成此操作后,将再次检查用户是否正确登录,但显然会话为空。我们注意到,Laravel为我们从AngularJS发出的每一个请求创建了一个新会话。原因可能是来自不同子域的JS请求是跨域请求,浏览器不发送cookie来标识会话。也许这就是原因。
显然,我不知道这个问题的解决办法。
发布于 2015-02-12 01:32:56
自从我今天花了这么多小时之后,我就做了以下的事情。我已经编辑了我的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;
}
}发布于 2015-02-12 01:18:30
由于web是无状态的,仅使用标头信息或域可能会导致中间人受到攻击。来自客户端的任何内容都可以修改或复制,包括cookie数据。在这里,我对你的问题没有确切的答案,但我会建议一个不同的策略。
与api通信时使用的一种做法是使用带有安全请求的访问令牌;类似于oauth2客户机/服务器关系。通过向api发送XHR或CURL请求中的令牌,系统可以更好地验证它正在与谁交谈。否则,您可能会遇到欺骗通过身份验证的用户的人。
https://stackoverflow.com/questions/28467408
复制相似问题