使用了容器之后,第三方登陆失效了

2019-07-09 18:40:30 +08:00
 Hopetree

描述一下场景: 我的服务是 django 写的,然后添加了第三方登陆(微博,GitHub ),之前登陆没问题,但是我把服务使用容器化部署之后( python 容器当服务-->nginx 跟本地映射)

因为服务的容器名称是 web,所以 nginx 上面的配置是

location / {
        proxy_pass http://web:8000;
    }

其他页面都没啥问题,但是第三方登陆的跳转发现了问题,在登陆的时候选择微博的时候,我发现回调地址不是我自己的域名,而是容器的那个 http://web

具体可以看一下效果: https://tendcode.com/accounts/login/?next=/ 点击微博登陆,会发现

https://api.weibo.com/oauth2/authorize?client_id=1858902686&redirect_uri=http%3A%2F%2Fweb%3A8000%2Faccounts%2Fweibo%2Flogin%2Fcallback%2F&scope=&response_type=code&state=gtjDNiAYOO7Y

redirect_uri变成了 http://web 而不是我自己的域名

我不知道这个问题到底是 nginx 可以解决还是要去看 django-allauth

3156 次点击
所在节点    Django
3 条回复
Hopetree
2019-07-09 19:15:40 +08:00
自己解决了,查看了一个 flask 容器化项目的 nginx,发现多了几个设置,我试着添加了,发现 OK 了,应该是那个 host 可以解决,

```
location / {
proxy_pass http://web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
```
siteshen
2019-07-09 19:17:59 +08:00
nginx 通常是这么配置的(其中 proxy_params 里会设置主机名等 HTTP 头):

location / {
include proxy_params;
proxy_pass http://web:8000;
}

# file proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;


改成这样应该就可以了。
a663
2019-07-09 19:32:36 +08:00
跨域了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/581432

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX