之前请教过大家如何用 flask,后来开发了个微信公众号的相关服务,这会儿玩 facebook,发现特别分裂。
背景描述:用户访问我的网站,然后通过 FB 登录,我的服务器拿到 token,通过 API 向 FB 服务器请求数据,处理后显示给用户。 需要事先注册好域名在 FB 开发者后台填写好,如果通过其他域名(比如 localtunnel 生成的链接)访问服务,会出错。
开发姿势 1: 本地敲代码,然后 debug 模式运行 flask,然后把服务器 80 端口转发到本地,本地 flask 再爬个梯子连回服务器,向 FB 发送请求,可以绕地球七圈半……
开发姿势 2: ssh 到服务器,开一个 vim 之类的编辑器,ssh 再开一个 session,运行程序;或者之前有人提到 pycharm 可以直接更新代码到远程服务器,不过之前试过那玩意儿太大了,觉得卡卡地……
两种姿势都觉得很分裂啊,大家有啥更优雅的姿势不?
1
billlee 2017-05-21 00:42:07 +08:00
首先,你可以用 tmux, 不需要搞那么多 ssh session.
其次,你可以在本地敲代码,然后 rsync 到服务器上,不一定要在服务器上开 ssh 敲。 |
2
Kilerd 2017-05-21 02:20:12 +08:00 via iPhone
ngrok 转发到本地
|
3
ETiV 2017-05-21 02:25:32 +08:00 via iPhone
ssh -fNR 转发到本地
|
4
notes 2017-05-21 06:59:00 +08:00 via Android
搞一条能用的 facebook 的 host
|
5
XYxe 2017-05-21 08:03:12 +08:00 via Android
VSCode 有个插件可以用 ftp 来同步代码,用了一段时间还好。
|
6
junzki 2017-05-21 08:28:15 +08:00
Sublime Text 的 FTPSync 插件不错
或者 RSync 一下? 或者干脆用 NFS 把远程服务器的目录挂载到本地? |
7
AlexaZhou 2017-05-21 09:59:48 +08:00
试试改本地 host 记录,把域名指向本地
|
8
leopku 2017-05-21 10:13:09 +08:00 via Android
Mock 是正解
|
9
mokeyjay 2017-05-21 10:38:40 +08:00
改 hosts 把域名指向本地即可
|
10
magicdawn 2017-05-21 10:57:13 +08:00
如果只是做 Facebook login 的话, 可以不使用 OAuth redirect 模式, 跳来跳去, 使用 SDK, 无需跳转...
在 PC 网页端 / 移动网页端 / App 端接入 SDK, 直接获取 fb token, 然后客户端拿着 fb token 来登录系统即可... 在 PC 网页端表现是一个弹出窗口让授权... |
11
lavande OP @billlee 我水平比较菜,经常需要写一段之后 run 一下看看,然后发现有问题,有时候可能只改几个字母,再 run 一下……这样的话,在本地写好就会频繁需要 rsync,我试试 tmux 看看
|
12
lavande OP @Kilerd 谢谢!我看一下,之前用 localtunnel,类似的,但是每次都生成一个不同 url,因为要在 FB 开发者后台填上固定的,所以非常不方便
|
13
lavande OP @AlexaZhou 好方法,我试试看,如果 FB 和我的服务器之间交换数据时候不是直接访问我的域名的话,那应该就没问题!
|
14
oott123 2017-05-21 11:28:47 +08:00 via Android
lt --port 8080 --subdomain xxxxxx
用 localtunnel 生成一个固定的不就好了。 |
15
lavande OP @magicdawn 这种用 SDK 不跳转的方法获取的 token 是不是在用户端,然后由用户这边连接 FB 服务器去请求数据?我现在是按照官方文档给的那个 manually login 的方法,给用户一个链接,然后授权完后 redirect 回我的网站,带上参数,然后我这边就拿到 token,去 FB 抓取一些复杂的数据,然后处理之后返还给用户,处理过程比较复杂,不太合适在用户的浏览器里完成……
|
17
oott123 2017-05-21 11:31:12 +08:00 via Android
不过一般这种 OAuth,他们服务器都不直接访问你的域名,而是通过跳转来搞定的,所以本地 hosts 就够用了。甚至不本地 host 而是选择把某个子域名解析到 127.0.0.0.1 …(原理反正一样)
lt 固定域名的方式可以调微信公众号之类带 webhook 的… |
18
oott123 2017-05-21 11:32:26 +08:00 via Android
手抖多打了个 0. 手机回复见谅
|
19
magicdawn 2017-05-21 11:57:09 +08:00
@lavande 拿到 FB 的 token 了, 然后调用 FB 的接口, 客户端 /服务端都可以调用, 拿基本信息
我看代码即是这个接口 /** * 根据前端 token 获取 Facebook 账户信息 */ const auth = exports.auth = co.wrap(function*(token) { const me = yield rp.get({ json: true, url: 'https://graph.facebook.com/v2.8/me', qs: { 'fields': 'id,name,email', 'access_token': token, } }) // map userId me.userId = me.id // userId, name, email return me }) https://graph.facebook.com/v2.8/me 这个是公网接口, 前后端都可以调用, 如果你做的 FB 登录不需要让服务端知道, 也可以在客户端调用...但不让服务端知道没有什么意义... |
20
WildCat 2017-05-21 14:19:29 +08:00 via iPhone
http_proxy 环境变量
|
21
Miy4mori 2017-05-21 15:08:25 +08:00 via iPhone
端口转发到本地啊
|
22
coolcoffee 2017-05-21 15:52:04 +08:00
微信的不也是这样呀, 需要预先设置域名。
我当时的解决办法就是,修改 hosts,把域名解析到本地。开发完再删掉 |