前面介绍了OAuth的详细概念知识。很多网站登录时,允许使用第三方网站的身份,这称为"第三方登录"。

下面就以 GitHub 为例,写一个最简单的应用,演示第三方登录。
所谓第三方登录,实质就是 OAuth 授权。用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份。获取第三方网站的身份数据,就需要 OAuth 授权。
举例来说,A 网站允许 GitHub 登录,背后就是下面的流程。
一个应用要求 OAuth 授权,必须先到对方网站登记,让对方知道是谁在请求。
所以,你要先去 GitHub 登记一下。当然,我已经登记过了,你使用我的登记信息也可以,但为了完整走一遍流程,还是建议大家自己登记。这是免费的。


接着就能看见我们应用
记得保存。
GitHub Authorizing OAuth Apps Docs
使用的是OAuth的授权码方式授权。
The web application flow to authorize users for your app is:
为您的应用程序授权用户的 Web 应用程序流程是:
GET https://github.com/login/oauth/authorize
当您的 GitHub 应用程序指定一个login参数时,它会提示用户使用他们可以用于登录和授权您的应用程序的特定帐户。
| 姓名 | 类型 | 描述 |
|---|---|---|
client_id |
string |
必填。注册时从 GitHub 收到的客户端 ID 。 |
redirect_uri |
string |
您的应用程序中的 URL 将在授权后发送用户。请参阅下面有关重定向 url的详细信息。 |
login |
string |
建议用于登录和授权应用程序的特定帐户。 |
scope |
string |
以空格分隔的范围列表。如果未提供,scope则默认为未授权应用程序任何范围的用户的空列表。对于拥有应用程序授权范围的用户,用户将不会看到带有范围列表的 OAuth 授权页面。相反,流程的这一步将自动完成用户为应用程序授权的范围集。例如,如果用户已经执行了两次 Web 流,并且已经授权了一个具有范围的user令牌和另一个具有repo范围的令牌,则不提供 a 的第三个 Web 流scope将接收具有user和repo范围的令牌。 |
state |
string |
一个不可猜测的随机字符串。它用于防止跨站点请求伪造攻击。 |
allow_signup |
string |
在 OAuth 流程期间,是否会为未经身份验证的用户提供注册 GitHub 的选项。默认值为true. false在政策禁止注册时使用。 |

启动项目,访问localhost:8080/点击超链接之后,就会要登录GitHub账号。

接着就会对其进行授权。
如果用户接受您的请求,GitHub 将重定向回您的站点,其中包含一个临时code的代码参数以及您在上一步中提供的state参数状态。临时代码将在 10 分钟后过期。如果状态不匹配,则第三方创建了请求,您应该中止该过程。
也就是重回到我们的站点,也就是发送了/localhost:8080/oauth/redirect(自定义),并且携带了code
将此交换code为访问令牌:
POST https://github.com/login/oauth/access_token
| 姓名 | 类型 | 描述 |
|---|---|---|
client_id |
string |
必需的。您从 GitHub 收到的 OAuth 应用程序的客户端 ID。 |
client_secret |
string |
必需的。您从 GitHub 收到的 OAuth 应用程序的客户端密码。 |
code |
string |
必需的。您收到的作为对步骤 1 的响应的代码。 |
redirect_uri |
string |
授权后发送用户的应用程序中的 URL。 |
默认情况下,响应采用以下形式:
access_token=gho_16C7e42F292c6912E7710c838347Ae178B4a&scope=repo%2Cgist&token_type=bearer
如果您在Accept标头中提供格式,您还可以接收不同格式的响应。例如,Accept: application/json或Accept: application/xml:
Accept: application/json
{
"access_token":"gho_16C7e42F292c6912E7710c838347Ae178B4a",
"scope":"repo,gist",
"token_type":"bearer"
}
Accept: application/xml
<OAuth>
<token_type>bearer</token_type>
<scope>repo,gist</scope>
<access_token>gho_16C7e42F292c6912E7710c838347Ae178B4a</access_token>
</OAuth>

访问令牌允许您代表用户向 API 发出请求。
Authorization: token OAUTH-TOKEN
GET https://api.github.com/user
Authorization: token OAUTH-TOKEN请求头设置参数(token后面有空格)

代码完成,此时首页点击超链接之后就会得到GitHub的用户信息Json数据。

显示效果使用了Json浏览器插件。
到此为止大功告成~~
我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt。我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的东西g=File.new("notinbook.txt","w")File.open("926.txt","r")do|f|while(line=f.gets)x=line.chompifFile.open("master.txt","w")do|h|endwhile(line=h.gets)ifline.chomp!=xputslineendende
我需要从站点抓取数据,但它需要我先登录。我一直在使用hpricot成功地抓取其他网站,但我是使用mechanize的新手,我真的对如何使用它感到困惑。我看到这个例子经常被引用:require'rubygems'require'mechanize'a=Mechanize.newa.get('http://rubyforge.org/')do|page|#Clicktheloginlinklogin_page=a.click(page.link_with(:text=>/LogIn/))#Submittheloginformmy_page=login_page.form_with(:act
我为Devise用户和管理员提供了不同的模型。我也在使用Basecamp风格的子域。除了我需要能够以用户或管理员身份进行身份验证的一些Controller和操作外,一切都运行良好。目前我有authenticate_user!在我的application_controller.rb中设置,对于那些只有管理员才能访问的Controller和操作,我使用skip_before_filter跳过它。不幸的是,我不能简单地指定每个Controller的身份验证要求,因为我仍然需要一些Controller和操作才能被用户或管理员访问。我尝试了一些方法都无济于事。看来,如果我移动authentica
我想用一个(自己的)omniauth提供商来衡量每秒可以登录多少次。我需要了解此omniauth/oauth请求的性能如何,以及此身份验证是否具有可扩展性?到目前为止我得到了什么:defperformance_auth(user_count=10)bm=Benchmark.realtimedouser_count.timesdo|n|forkdoclick_on'Logout'omniauth_config_mock(:provider=>"foo",:uid=>n,:email=>"foo#{n}@example.net")visit"/account/auth/foo/"enden
我正在使用Ruby和Eventmachine库编写一个应用程序。我真的很喜欢非阻塞I/O和事件驱动系统的想法,我遇到的问题是日志记录。我正在使用Ruby的标准记录器库。并不是说日志记录需要永远,但它似乎不应该阻塞,但它确实阻塞了。是否有某个库将Ruby的标准记录器实现扩展为非阻塞的,或者我应该只调用EM::defer进行日志记录调用?有没有办法让eventmachine已经为我做这件事? 最佳答案 我最终将记录器包装在一个启动线程并具有FIFO队列的单例类中。日志记录会将日志信息转储到队列中,线程只是循环,从队列中拉出内容并使用真正
当尝试创建一个heroku应用程序并通过git推送到它时,我收到以下错误:$herokucreate'"C:\ProgramFiles\ruby-1.9.2\bin\ruby.exe"isnotrecognizedasaninternalorexternalcommand,operableprogramorbatchfile.但是,$ruby-vruby1.9.3p125[i386-mingw32]我已经检查了PATH环境,它肯定包含“C:\ProgramFiles(x86)\ruby-1.9.2\bin”。同样有趣的是,当导航到该目录时,它实际上并不包含名为ruby.exe的文件
我有一个运行Devise的RoR应用程序(Rails4.2、Ruby2.2.0)。我已对其进行设置,以便管理员用户(标识我添加到用户模型的“is_admin”bool值)能够创建新的用户帐户,为他们提供生成的密码和确认电子邮件。这一切都正常工作。我还添加了datetime列pass_changed,当用户更改密码时应该更新它,然后检查created_at以确保自帐户创建以来密码已更改。如果两个日期相同,则用户将被重定向到密码更改表单。我编写了一个程序来检查用户是否更改了密码并将其放在我的application_controller.rb中:defcheck_changed_pass@u
我在文档中看不到这个,但我认为这是一个已解决的问题。我在Rails之外使用ActiveRecord,我的脚本加载了从另一个应用程序转储的schema.rb。我想加载此模式而不将迁移输出转储到标准输出,但替换ActiveRecord::Base.logger不会关闭它。我应该覆盖什么来阻止噪音? 最佳答案 技巧显然在ActiveRecord::Migration中:ActiveRecord::Migration.verbose=false这使得迁移不会将信息输出到$stdout。有一个名为.suppress_messages的便捷包装
跳过联网激活:OOBE界面直接按Ctrl+Shift+F3进入审核模式。这样就可以直接进入系统进行一些硬件测试等,而不用联网激活导致新机无法退货。需要注意的是,在审核模式下进行的一些操作都会保留,并不会在退出后自动还原!安装的软件在正常开机进系统后还会看见!如果电脑确实没连互联网又不想强行跳过OOBE(网上很多教程会叫你直接结束OOBE进程,但这是不推荐的,因为一些厂商自带优化程序和系统初始化设置在后面都会应用,对于笔记本跳过的话你会发现驱动和内置应用都没有装上。其实这部分脚本就在系统盘的Recovery隐藏文件夹下),可以参考以下方式:https://www.landiannews.com/
目录1、yum安装mysql修改密码(1)在mysql里面修改(2)第二种方式,利用mysqladmin修改密码2、没有密码,登录mysql修改密码3、mysql的安全设置1、yum安装mysql在CentOS中默认安装有MariaDB(MySQL的一个分支),安装完成之后可以直接覆盖MariaDB。rpm-qa|grepmariadb查询是否安装了mariadbrpm-e--nodepsmariadb-libs-5.5.60-1.el7_5.x86_64卸载mariadwgethttp://dev.mysql.com/get/mysql57-community-release-el7-11.