作者:给立乐*
出处:http://spencer-dev.com/2016/05/14/Github OAuth 登录使用流程
声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。
Github OAuth 登录的实现流程
最近在做 GitHub 相关的东西,需要一个登录的功能,所以总结下在实现过程中查的文档以及相关资料。把步骤以及一些小坑记录下来。
GitHub 认证
1. 申请认证
首先申请在 GitHub 申请一个 “Developer applications” 的权限。
地址:Developer application
2. 填写信息
填写好相关信息 “Application name”, “Homepage URL”, “Application descriptioin”, “Authorization callback URL”。
Callback URL 前期可以随便填,后面等 Server 部署成功后,可以更改。
3. 完成 GitHub 部分
全部都填写完成并保存好 “Client ID” , “Client Secret” 后,开始下面步骤。
在本地安装 Heroku 工具
工具地址:heroku toolbelt
下载成功后,安装好。
在 Terminal
中输入:
输入用户名和密码之后,会提示登陆成功。
本地工具就安装好了。
在 Heroku 创建 Application
打开网页版 Heroku
,打开后右上角有一个 + (加号)
,点击后弹出浮窗,然后继续点击 "create new app"
,在 "App Name(optional)"
中输入 app 的名字,然后点击 "Create App"
。
应用创建就成功了。
将应用 Clone 到本地
应用创建成功后,应该会自动跳转到 app 的 "Deploy"
tab 中。页面下方有操作提示。
具体操作为:将应用 Clone 到本地,并进入本地项目目录。(命令如下)
|
|
在本地配置 Ruby 的 WebServer 环境
文档地址:Sinatra
安装 Sinatra
在 Terminal
中执行以下语句即可安装。(有可能因为网络等问题很慢或失败,多等等或重新执行命令就好了。如果提示需要先安装其他东西,就按照提示安装,再重新执行该命令。)
HelloWorld
先简单写一个小例子来看下
|
|
运行
编写完成后,把它运行起来。
|
|
Sinatra 的默认端口是 4567
所以直接在浏览器中打开 http://localhost:4567 就能够看到我们熟悉的 “Hello World” 了。
停止运行
停止运行就在 Terminal 中直接按 control + c
就可以了。
Heroku + Ruby 部署 Server
部署和编写 Server 使用 Ruby 语言进行。(用过之后发现 Ruby 做 Web 相关的东西真是方便。。)
使用 GitHub 中已有的开源项目
项目地址:github/pltform-samples/…/…/basics-of-authentication
将项目 Clone 到本地。
- 将 Clone 下来的文件,复制到刚刚创建的本地项目文件夹中。
路径为:/platform-samples/api/ruby/basics-of-authentication/
配置环境变量
在本地项目目录中打开
advanced_server.rb
可以看到 “GH_BASIC_CLIENT_ID” 和 “GH_BASIC_SECRET_ID”,这两个东西对应到 GitHub 上,就是刚刚申请 “Developer application” 时,成功后的返回的结果。advanced_server.rb
中的提示说,不要把 “CLIENT_ID” 和 “SECRET_ID” hard-coded 到这里。说推荐配置到环境变量中,那咱就搞起来。将 “CLIENT_ID” 和 “SECRET_ID” 配置到 Heroku 的环境变量中。
文档地址:Setting up config vars for a deployed application
在本地项目目录中执行以下命令:12345678# 设置 CLIENT_ID$ heroku config:set GH_BASIC_CLIENT_ID=xxxxxxx# 设置 SECRET_ID$ heroku config:set GH_BASIC_SECRET_ID=zzzzzzz# 打印出设置的变量$ heroku config
环境变量配置完成。
添加 Config.ru 文件
- 在本地项目目录中添加
Config.ru
文件。12require './advanced_server'run Sinatra::Application
安装 Server 所需依赖
Config.ru
文件编写并保存完后,现在需要安装 Server 所需的依赖。
在本地项目目录执行。
|
|
中间可能会报错,提示需要先安装其他依赖,按照提示安装后,重新运行此命令即可。
推送本地修改到 Heroku
执行 Git 命令进行推送。
|
|
这时候在浏览器中可以看到项目的 web page 。
如何定位错误,查看 Log
线上查看 log
|
|
这个命令可以直接查看线上运行时 log 。
在本地运行,查看 log。
|
|
运行起来后,在本地访问 http://localhost:4567 地址。如果出错,Terminal
中和网页中都能够直接看到错误。
根据错误查找对应解决办法即可。
参考文档:
GitHub Developer OAuth - non-web-application-flow
Getting Started with Ruby on Heroku
Deploying Rack-based Apps
Sinatra Getting Started
NoMethodError: undefined method `join’ for #
Ruby 环境变量
Setting up config vars for a deployed application