首先是介绍一下这个gem:oauth
项目首页是:http://oauth.rubyforge.org/,封装了Oauth的一些加密的过程和获取access token的过程,直接调用相应方法就可以了,里面也有例子可以参考。
这个Gem有一点问题还没有解决,比如微博需要上传文件,就不行咯。。。。大概原理是这样滴,这个gem会自动对传过去的所有参数进行签名,具体的签名方法请参考Oauth认证的详细说明……拿新浪微博举例子吧,需要一个status参数和一个pic参数,如果按照封装的方法传入这两个参数之后,会对status和pic参数进行签名,但是一般pic文件都是直接采用binary方式上传到服务器,并不需要签名。这样就无法用封装的方法了,遇到这种情况还是自己写吧。
下面是具体的方法,使用的时候直接调用upload_weibo就可以了~
CRLF = "\r\n"
#发布带图片的微博信息,因为Oauth这个gem暂时还不支持带图片参数的post请求
#所以自己构造请求的body部分,然后使用sign!这个方法来为请求的参数签名
def upload_weibo(req_path, consumer, access_token, status, file_path)
url = URI.parse(req_path)
Net::HTTP.new(url.host, url.port).start do |http|
req = Net::HTTP::Post.new(url.request_uri)
req.set_form_data({"status" => CGI.escape(status.to_s)})
add_oauth(req, consumer, access_token)
add_multipart_data(req, {:pic=> File.new(file_path, "rb"), :status=> status})
res = http.request(req)
res.body
end
end
private
#对请求主体进行签名,调用Oauth的sign!方法
#因为pic参数一般不进行签名,所以现在的请求主体不包含pic信息
#仅仅包含请求的微博文本信息
def add_oauth(req, consumer, access_token)
consumer.sign!(req, access_token)
end
#创建请求的body部分,包含所有的信息(文字信息,上传的图片)
def add_multipart_data(req, params)
boundary = Time.now.to_i.to_s(16)
req["Content-Type"] = "multipart/form-data; boundary=#{boundary}"
body = ""
params.each do |key,value|
esc_key = CGI.escape(key.to_s)
body << "--#{boundary}#{CRLF}"
if value.respond_to?(:read)
body << "Content-Disposition: form-data; name=\"#{esc_key}\"; filename=\"#{File.basename(value.path)}\"#{CRLF}"
body << "Content-Type: #{mime_type(value.path)}#{CRLF*2}"
body << value.read
else
body << "Content-Disposition: form-data; name=\"#{esc_key}\"#{CRLF*2}#{CGI.escape(value.to_s)}"
end
body << CRLF
end
body << "--#{boundary}--#{CRLF*2}"
req.body = body
req["Content-Length"] = req.body.size
end
#检测文件的类型
#传入的参数是文件的路径信息,根据正则表达式判断为什么类型的文件
def mime_type(file)
case
when file =~ /\.jpg/ then 'image/jpg'
when file =~ /\.gif$/ then 'image/gif'
when file =~ /\.png$/ then 'image/png'
else 'application/octet-stream'
end
end
分享到:
相关推荐
<add key="OAuth2" value="true"/> <!--新浪微博社区登陆接口--> <!--QQ社区登陆接口--> <!--淘宝社区登陆接口--> 本站接受页 OAuth2Base ob = OAuth2Factory.Current; string strErrorMessage = ""; ...
OAuth2 -一个OAuth 2.0协议的Ruby封装
Android中的OAuth2.0_QQ第三方授权登录
第三方登录,整理的微博和QQ的,一步步的,如果你在不会,这么详细,如果你不会,你就是猪
基于spring security + oauth2 + jwt ,可优雅集成第三方登录.zip
oauth2.0第三方 qq、sina、baidu、renren、osc、豆瓣 等,登陆的简易封装!
1.理解OAuth 2.0http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html2.github第三方登录h
含有详细文档+开放Demo实例。使用C#语言开发,MVC框架调用新浪微博第三方登录OAuth2.0接口。 详细介绍相关开发步骤信息。
oauth2, 用于 OAuth 2.0协议的ruby 封装器 OAuth2 OmniAuth正在寻找一个新的家庭。 如果你对接手这个项目感兴趣,请联系 jason@mobomo.com 公司。用于 OAuth 2.0规范的ruby 包装器。安装gem instal
oauth2 逻辑脑图 第三方授权验证逻辑流程解释,注释脑图
【第三方开放平台系列】腾讯微博Oauth2.0授权认证-源码
含有详细文档+开放Demo实例。使用C#语言开发,MVC框架调用Github第三方登录OAuth2.0接口。 详细介绍相关开发步骤信息。
主要介绍了Spring Security OAuth2集成短信验证码登录以及第三方登录,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
ASP.NET MVC使用OAuth2.0实现身份验证单点登录-内附代码说明,适合开发者学习
OhMyAuth - 简单的OAuth2库支持多种第三方服务
自己练手写的第三方登录,主要重点在AfterAction中参数的配置以及方法的调用,注意Config中qqconnectin那个配置文件,里面的参数很重要
Auth2是一种开放标准的授权协议,用于授权第三方应用程序访问受保护的资源。它提供了一种安全的方式,允许用户授权第三方应用程序代表他们访问受保护的资源,而无需将用户名和密码直接提供给第三方应用程序。
Doorkeeper是Rails的一个OAuth 2提供者,OAuth 2.0协议的一个Ruby封装
weibo oauth 认证jar包 cas应用weibo集成