使用omniauth-bitbucket和bitbucket.org做帐号连接

1. 安装omniauth-bitbucket

首先新建一个rails的工程,具体过程就不说了,然后编辑Gemfile

gem 'bitbucket_rest_api', :git=>'https://github.com/vongrippen/bitbucket.git'
gem 'omniauth-bitbucket'

其中,bitbucket_rest_api是bitbucket API的Ruby包装,这里如果不写git源的话,在我Ruby2.0+Rails4的情况下会导致hashie依赖错误。

omniauth-bitbucket是omniauth的bitbucket实现。
值得一提的是,omniauth-bitbucket 是一个杭州的工程师写的,具体可以参考其github主页

编辑完Gemfile之后,就可以执行bundle install了。

2. 使用omniauth-bitbucket和bitbucket

2.1. 设置oauth 的provider

编辑config/initializers/omniauth.rb文件

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :bitbucket, 'BITBUCKET_KEY', 'BITBUCKET_SECRET'
end

2.2. 设置oauth认证的routing规则

编辑routes.rb

match “/auth/:provider/callback” => “bitbucket#callback”

这一句,同时生成了/auth/:provider这个url,在本例里,即”/auth/bitbucket”。用户访问这个url,会立即被导向provider的认证授权页面。而授权后的callback页面,就是上面的match规则指定的url。

关于oauth认证相关的东西,代码其是很少。

2.3. 处理callback

在上面设置的callback方法里,就可以处理服务端返回的授权token了。

class BitbucketController < ApplicationController

  def callback
    auth = request.env["omniauth.auth"]
    …
    …

  end
end

直接从request里即可取得auth情报,这个auth是一个AuthHash类的实例,其中最重要的信息应该就是用户的access token和secret了,可以通过:

config.oauth_token = auth.credentials.token
config.oauth_secret = auth.credentials.secret

从request里取得的auth情报,就可以做各种处理了,比如保存到数据库之类的。

现在就可以开始测试了,可以设置一个页面,里面有指向/auth/bitbucket的连接,或者直接在浏览器输入/auth/bitbucket。

2.4. 使用BitBucket

有了auth信息,就可以生产BitBucket的实例并使用了:

bitbucket = BitBucket.new do |config|
  config.oauth_token = a.credentials.token
  config.oauth_secret = a.credentials.secret
  config.client_id = 'BITBUCKET_KEY'
  config.client_secret = 'BITBUCKET_SECRET'
end

repos = bitbucket.repos.list

changesets = bitbucket.repos.changesets.all 'USER_NAME', 'RESP_NAMEW'

具体的BitBucket类和方法请参考相关Doc,也可以通过irb来确认:

irb(main):008:0> BitBucket.actions

|--> actions
|--> authorizations
|--> events
|--> issues
|--> oauth
|--> pull_requests
|--> repos
|--> repositories
|--> search
|--> teams
|--> users


irb(main):001:0> BitBucket::Repos.actions

|--> actions
|--> all
|--> branches
|--> changesets
|--> create
|--> edit
|--> find
|--> following
|--> get
|--> keys
|--> list
|--> list_branches
|--> list_tags
|--> repo_tags
|--> repository_tags
|--> sources
|--> tags

3. 其它

如果不喜欢omniauth的url风格,可以在初始化的时候自己定制:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, 'TWITTER_CONSUMER_KEY', 'TWITTER_CONSUMER_SECRET',
    :request_path => '/sign_in', :callback_path => '/sign_in/callback'
end


Posted in Rails, Web Tagged with: , ,

无觅相关文章插件,快速提升流量