使用Google账户登录的实现代码

Gemfile为:

gem 'ruby-openid'
gem 'rack-openid'

 sessions_controller.rb的代码:

class SessionsController < ApplicationController

  def new
    flash[:returnurl] = params[:returnurl] if params[:returnurl]
    response.headers['WWW-Authenticate'] = Rack::OpenID.build_header( #build身份验证header,跳转到OpenID认证url
        :identifier => "https://www.google.com/accounts/o8/id", #这里hard code了Google的OpenID url,测试后会加上别的如新浪围脖/豆瓣等
        :required => ["http://axschema.org/contact/email"], #返回OpenID帐号的email
        :return_to => sessions_url, #返回为post create action
        :method => 'POST')
    head 401 #状态码为401
  end

  def create
    if openid = request.env[Rack::OpenID::RESPONSE]
      case openid.status
      when :success
        ax = OpenID::AX::FetchResponse.from_success_response(openid)
        identify_url = openid.display_identifier
        email = ax.get_single('http://axschema.org/contact/email') # 得到OpenID帐号的email
        user = User.where(:email => email).first || User.new
        user.email = email
        user.identify_url = identify_url
        log_in(user)
        redirect_to(flash[:returnurl] || root_path)
      when :failure
        render :action => 'problem'
      end
    else
      redirect_to new_session_path
    end
  end

end
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值