V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
lavande
V2EX  ›  Python

开发 facebook 相关的服务,感觉神烦

  •  
  •   lavande · 2017-05-20 23:13:33 +08:00 · 3211 次点击
    这是一个创建于 2771 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前请教过大家如何用 flask,后来开发了个微信公众号的相关服务,这会儿玩 facebook,发现特别分裂。

    背景描述:用户访问我的网站,然后通过 FB 登录,我的服务器拿到 token,通过 API 向 FB 服务器请求数据,处理后显示给用户。 需要事先注册好域名在 FB 开发者后台填写好,如果通过其他域名(比如 localtunnel 生成的链接)访问服务,会出错。

    • 开发姿势 1: 本地敲代码,然后 debug 模式运行 flask,然后把服务器 80 端口转发到本地,本地 flask 再爬个梯子连回服务器,向 FB 发送请求,可以绕地球七圈半……

    • 开发姿势 2: ssh 到服务器,开一个 vim 之类的编辑器,ssh 再开一个 session,运行程序;或者之前有人提到 pycharm 可以直接更新代码到远程服务器,不过之前试过那玩意儿太大了,觉得卡卡地……

    两种姿势都觉得很分裂啊,大家有啥更优雅的姿势不?

    22 条回复    2017-05-21 15:52:04 +08:00
    billlee
        1
    billlee  
       2017-05-21 00:42:07 +08:00
    首先,你可以用 tmux, 不需要搞那么多 ssh session.
    其次,你可以在本地敲代码,然后 rsync 到服务器上,不一定要在服务器上开 ssh 敲。
    Kilerd
        2
    Kilerd  
       2017-05-21 02:20:12 +08:00 via iPhone
    ngrok 转发到本地
    ETiV
        3
    ETiV  
       2017-05-21 02:25:32 +08:00 via iPhone
    ssh -fNR 转发到本地
    notes
        4
    notes  
       2017-05-21 06:59:00 +08:00 via Android
    搞一条能用的 facebook 的 host
    XYxe
        5
    XYxe  
       2017-05-21 08:03:12 +08:00 via Android
    VSCode 有个插件可以用 ftp 来同步代码,用了一段时间还好。
    junzki
        6
    junzki  
       2017-05-21 08:28:15 +08:00
    Sublime Text 的 FTPSync 插件不错
    或者 RSync 一下?
    或者干脆用 NFS 把远程服务器的目录挂载到本地?
    AlexaZhou
        7
    AlexaZhou  
       2017-05-21 09:59:48 +08:00
    试试改本地 host 记录,把域名指向本地
    leopku
        8
    leopku  
       2017-05-21 10:13:09 +08:00 via Android
    Mock 是正解
    mokeyjay
        9
    mokeyjay  
       2017-05-21 10:38:40 +08:00
    改 hosts 把域名指向本地即可
    magicdawn
        10
    magicdawn  
       2017-05-21 10:57:13 +08:00
    如果只是做 Facebook login 的话, 可以不使用 OAuth redirect 模式, 跳来跳去, 使用 SDK, 无需跳转...
    在 PC 网页端 / 移动网页端 / App 端接入 SDK, 直接获取 fb token, 然后客户端拿着 fb token 来登录系统即可...
    在 PC 网页端表现是一个弹出窗口让授权...
    lavande
        11
    lavande  
    OP
       2017-05-21 11:20:27 +08:00
    @billlee 我水平比较菜,经常需要写一段之后 run 一下看看,然后发现有问题,有时候可能只改几个字母,再 run 一下……这样的话,在本地写好就会频繁需要 rsync,我试试 tmux 看看
    lavande
        12
    lavande  
    OP
       2017-05-21 11:22:15 +08:00
    @Kilerd 谢谢!我看一下,之前用 localtunnel,类似的,但是每次都生成一个不同 url,因为要在 FB 开发者后台填上固定的,所以非常不方便
    lavande
        13
    lavande  
    OP
       2017-05-21 11:23:35 +08:00
    @AlexaZhou 好方法,我试试看,如果 FB 和我的服务器之间交换数据时候不是直接访问我的域名的话,那应该就没问题!
    oott123
        14
    oott123  
       2017-05-21 11:28:47 +08:00 via Android
    lt --port 8080 --subdomain xxxxxx

    用 localtunnel 生成一个固定的不就好了。
    lavande
        15
    lavande  
    OP
       2017-05-21 11:29:54 +08:00
    @magicdawn 这种用 SDK 不跳转的方法获取的 token 是不是在用户端,然后由用户这边连接 FB 服务器去请求数据?我现在是按照官方文档给的那个 manually login 的方法,给用户一个链接,然后授权完后 redirect 回我的网站,带上参数,然后我这边就拿到 token,去 FB 抓取一些复杂的数据,然后处理之后返还给用户,处理过程比较复杂,不太合适在用户的浏览器里完成……
    lavande
        16
    lavande  
    OP
       2017-05-21 11:30:30 +08:00
    @oott123 啊,原来是可以固定的啊,我没仔细看文档,谢谢了!
    oott123
        17
    oott123  
       2017-05-21 11:31:12 +08:00 via Android
    不过一般这种 OAuth,他们服务器都不直接访问你的域名,而是通过跳转来搞定的,所以本地 hosts 就够用了。甚至不本地 host 而是选择把某个子域名解析到 127.0.0.0.1 …(原理反正一样)

    lt 固定域名的方式可以调微信公众号之类带 webhook 的…
    oott123
        18
    oott123  
       2017-05-21 11:32:26 +08:00 via Android
    手抖多打了个 0. 手机回复见谅
    magicdawn
        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 登录不需要让服务端知道, 也可以在客户端调用...但不让服务端知道没有什么意义...
    WildCat
        20
    WildCat  
       2017-05-21 14:19:29 +08:00 via iPhone
    http_proxy 环境变量
    Miy4mori
        21
    Miy4mori  
       2017-05-21 15:08:25 +08:00 via iPhone
    端口转发到本地啊
    coolcoffee
        22
    coolcoffee  
       2017-05-21 15:52:04 +08:00
    微信的不也是这样呀, 需要预先设置域名。

    我当时的解决办法就是,修改 hosts,把域名解析到本地。开发完再删掉
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3144 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:15 · PVG 08:15 · LAX 16:15 · JFK 19:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.