`
myrev
  • 浏览: 164035 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

OpenId Authentication For Rails3

    博客分类:
  • Ruby
阅读更多
OpenId Authentication For Rails3


1. Add Gem

GemFile
gem 'ruby-openid'
gem 'rack-openid', '>=0.2.1', :require => 'rack/openid'



2. install open_id_authentication as a plugin

cd vendor/plugins

git clone git://github.com/rails/open_id_authentication.git



3. Modify vendor/plugins/open_id_authentication/init.rb

remove code

if Rails.version < '3'
  config.gem 'rack-openid', :lib => 'rack/openid', :version => '>=0.2.1'
end



Because your rails is 3.0.0.


4. Add OpenId Authentication

SessionController

def create
    logout_keeping_session!
    if using_open_id?
      open_id_authentication
    else
      user = User.authenticate(params[:login], params[:password])
    .....
end


def open_id_authentication(identity_url = nil)
    # Pass optional :required and :optional keys to specify what sreg fields you want.
    # Be sure to yield registration, a third argument in the #authenticate_with_open_id block.
    authenticate_with_open_id(identity_url,
      :required => [ :nickname, :email ],
      :optional => :fullname) do |result, identifier, registration|
      case result.status
      when :missing
        note_failed_signin "Sorry, the OpenID server couldn't be found"
      when :invalid
        note_failed_signin "Sorry, but this does not appear to be a valid OpenID"
      when :canceled
        note_failed_signin "OpenID verification was canceled"
      when :failed
        note_failed_signin "Sorry, the OpenID verification failed"
      when :successful
        if @current_user = User.where("open_id LIKE ?", "%#{identifier}%").first
          self.current_user = @current_user
          flash[:notice] = "Logged in successfully"
        else
          note_failed_signin "Sorry, no user by that identity URL exists"
        end
      end
      redirect_back_or_default('/')
    end

  def note_failed_signin(msg = nil)
    flash[:error] = msg || "Couldn't log you in as '#{params[:login]}'"
    logger.warn(msg || "Failed login for '#{params[:login]}' from #{request.remote_ip} at #{Time.now.utc}")
  end




Page: create.rhtml.erb
 <%= form_tag session_path do -%>
    <fieldset>
      <legend>Log In</legend>

      <dl>
        <dt><%= label_tag 'login' %></dt>
        <dd><%= text_field_tag 'login', @login %></dd>
      </dl>
      <dl>
        <dt><%= label_tag 'password' %> </dt>   
        <dd><%= password_field_tag 'password', nil %></dd>
      </dl>
      <!-- Uncomment this if you want this functionality-->
      <dl>
        <dt><%= label_tag 'remember_me', 'Remember me' %></dt>
        <dd><%= check_box_tag 'remember_me', '1', @remember_me %></dd>
      </dl>
      <dl>
        Or
      </dl>
      <dl>
        <dt><%= label_tag 'openid_identifier', 'OpenID' %></dt>
        <dd><%= text_field_tag 'openid_identifier' %></dd>
      </dl>
      <dl>
        <%= submit_tag 'Log in', :class=>"button" %>
      </dl>
      <p style="color: red"><%= flash[:error] unless flash[:error].nil? %></p>
    </fieldset>
  <% end -%>



User model should add a open_id column.


0
0
分享到:
评论

相关推荐

    OAuth gem for rails3

    OAuth gem for Rails3 是一个针对Ruby on Rails框架的授权库,它实现了OAuth协议,以便于在Rails应用中安全地处理第三方服务的授权流程。OAuth是一个开放标准,允许用户让第三方应用在无需分享用户名和密码的情况下...

    Aspnet-OpenId.AspNet.Authentication.zip

    Aspnet-OpenId.AspNet.Authentication.zip,旧版asp.net web应用程序的openid connect身份验证openid.aspnet.authentication,asp.net是一个开源的web框架,用于使用.net构建现代web应用和服务。asp.net创建基于html5...

    OpenID的Java客户端 JOpenID_OpenID_java_

    3. **初始化OpenID检查器**:使用JOpenID提供的`ConsumerManager`类来初始化OpenID检查器,它将处理验证过程中的各种交互。 4. **启动验证流程**:当用户输入OpenID标识后,调用检查器的`beginAuthentication()`方法...

    java微信获取OpenId

    微信开发获取openId

    openID sample server

    3. **身份验证**:用户在 OpenID 提供商处输入自己的凭证进行验证。 4. **响应**:如果身份验证成功,OpenID 提供商会向应用程序发送一个包含身份验证结果的消息。 5. **完成登录**:应用程序根据收到的信息决定是否...

    使用devise_openid_authenticatable的devise_example版本_Ruby_.zip

    3. **config/routes.rb**: Rails路由配置文件,可能会有针对OpenID认证的路由设置。 4. **app/models/user.rb**: 用户模型文件,`devise`通常会在这里添加一些模块,如`devise :database_authenticatable, :...

    openid资料大全

    3. **示例代码**:可能包含一些示例应用程序或代码片段,演示如何使用openid4java库来实现OpenID的身份验证功能,这对于初学者来说是非常有用的。 4. **教程和指南**:这些教程可能涵盖了从基础概念到高级特性的...

    OpenID中文文档

    3. **Relying Party (RP)**:依赖方,即使用OpenID进行身份验证的网站或服务。 4. **OpenID Provider (OP)**:开放ID提供者,为用户提供身份验证服务。 5. **OP Endpoint URL**:OP的终结点URL,是OP服务器处理身份...

    C#获取openid(详解)

    本代码作用于前后端分离获取微信openId,调用说明:在api中新建一个Default.aspx页面,复制文件中代码到页面中,修改appid,key,webAddr值。部署api;前端跳转url:api地址+“/efault.aspx?reurl="+前端页面地址;如果...

    php-openid-2.1.3

    用户只需要注册一个OpenID提供商(通常称为OP),然后可以使用这个提供商的URL作为身份标识,在支持OpenID的网站上进行登录。这样,用户不再需要记住每个网站的用户名和密码,减少了密码管理的复杂性,并降低了因...

    微信小程序获取OpenID +php后端完整源代码

    3. **微信小程序端** - 在小程序端,当用户授权登录时,调用wx.login()方法获取临时登录凭证(code)。 - 将获取的code通过网络请求发送到PHP后端,这一步通常使用wx.request()方法完成。 - 小程序端也需要配置小...

    PHP获取微信公众号用户的Openid

    PHP如何获得Openid,微信公众号通过appid和appsecret获取Openid,该类实现了从微信公众平台获取code、通过code获取openid和access_token、

    OpenID简介及与struts2_spring_hibernate框架集成

    3. **OpenID是什么** OpenID 是一种标准的开放协议,它允许用户通过自己的URI向网站提供身份验证信息。这个协议定义了用户和依赖方(Relying Party,即使用OpenID的网站)之间的交互流程,使得用户可以在不透露...

    php获取微信code.openid.名字和头像

    3. **获取用户信息**:有了access_token和openid,你可以进一步获取用户的名字和头像。如果你在第一步选择了`snsapi_userinfo`权限,可以直接请求用户信息。否则,只能获取到openid。这里我们假设你有snsapi_...

    OpenID教程 项目集成

    3. **防止OpenID钓鱼**:教育用户识别假冒的IdP页面,避免泄露个人信息。 四、OpenID的优势与挑战 1. **优势**:OpenID简化了用户的登录过程,减少了密码管理的负担,同时也降低了网站运营者的账户管理成本。 2. ...

    Java的OpenID服务器 JOIDS

    3. **标识URL(Identity URL)**:用户在OpenID系统中的唯一标识,可以是任何可解析的URL,如个人博客地址。 JOIDS的主要特点和功能包括: 1. **易用性**:JOIDS提供简单的配置和管理界面,使得部署和管理OpenID...

    BuildBot-OpenID:BuildBot的OpenID AuthorizationAuthentication插件

    BuildBot-OpenID BuildBot的OpenID授权/身份验证插件注意:更多文档即将发布。 注意2:此代码适用于BuildBot版本8。如何配置在master.cfg中,将authz_cfg =行替换为类似authz_cfg=openidauthz.OpenIDAuthZ( openid_...

    lobby_boy:用于OpenID Connect会话管理的Rails引擎

    用于OpenID Connect会话管理的Rails引擎 假定使用OmniAuth和omniauth-openid-connect策略。 依存关系 如果不存在,请添加以下gem: gem 'omniauth-openid-connect' , git : '...

    获取微信openid工具类

    3. **获取OpenID**:使用Access Token,调用相应接口,获取到用户的OpenID。OpenID是用户的唯一标识,与微信账号绑定。 在实际开发中,这个工具类可能包含以下几个关键方法: - `getAuthCode(String redirectUri)`...

Global site tag (gtag.js) - Google Analytics