由于访问令牌

时间:2016-01-06 15:19:01

标签: angularjs express cookies safari stormpath

我使用stormpath使用带有节点/快速服务器的角度webapp登录。除了Safari之外,这一切都适用于大多数现代浏览器。它似乎是访问令牌cookie的东西。不知道这是不是一个bug。

当我登录(使用用户名和密码)时,我的POST请求进展顺利,看起来像这样:

POST /login HTTP/1.1
Host: ****api.herokuapp.com
Content-Type: application/x-www-form-urlencoded
Origin: http://app.****.com
Content-Length: 30
Connection: keep-alive
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7
Referer: http://app.****.com/
Accept-Language: en-us
Accept-Encoding: gzip, deflate

username=***&password=********

一切顺利,并回复此回复:

HTTP/1.1 200 OK
Server: Cowboy
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: http://app.****.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS
Access-Control-Allow-Headers: X-Requested-With, Content-Type
Access-Control-Allow-Credentials: true
Set-Cookie: access_token=eyJraWQiOiIySUxB****unsEg; path=/; expires=Wed, 06 Jan 2016 16:01:38 GMT; httponly
Set-Cookie: refresh_token=eyJraWQiOiIySUxBNV&****LlwrlEtNhzI; path=/; expires=Sun, 06 Mar 2016 15:01:38 GMT; httponly
Date: Wed, 06 Jan 2016 15:01:38 GMT
Transfer-Encoding: chunked
Via: 1.1 vegur

在登录请求之后,我在加载路由之前请求userprofile数据。但是,此请求将返回HTTP 401:

GET /me HTTP/1.1
Host: ****api.herokuapp.com
Origin: http://app.****.com
Connection: keep-alive
If-None-Match: W/"8c4-kH0dxMVw01EmGs/YFtZjXg"
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7
Accept-Language: en-us
Referer: http://app.****.com/
Accept-Encoding: gzip, deflate

在另一个浏览器(firefox)中,使用/ me请求发送access_token cookie。我不知道为什么safari不会随请求发送cookie。结果,该请求是未经授权的(401)。有人知道如何解决这个问题,或者它是Stormpath中的错误

1 个答案:

答案 0 :(得分:2)

这可能是由跨域问题引起的。如果您的Angular应用程序是从与API服务不同的域提供的,则会遇到此问题。 Safari不允许在跨域请求上设置cookie。