`
akiraray
  • 浏览: 90242 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用Rails&Devise为移动设备建立一个简单的API登陆服务

    博客分类:
  • Web
 
阅读更多

使用Rails&Devise为移动设备建立一个简单的API登陆服务

使用的工具与源代码

Devise (https://github.com/plataformatec/devise)

Rails 4  (https://github.com/rails/rails)

Ruby-china 源代码 (https://github.com/ruby-china/ruby-china)

 

流程

利用API进行登陆,获取授权代码信息,使用授权代码信息与需要进行验证的API进行交互

 

配置Devise

增加authentication_token字段

假如应用已经初始化过了devise的user表,那么就需要额外利用rails生成一个新的数据迁移脚本

 

#rails g migration addAuthTokenToUser
class AddAuthTokenToUser < ActiveRecord::Migration
  def change
      change_table :users do |t|
          t.string :authentication_token
      end
      add_index  :users, :authentication_token, :unique => true
  end
end

 

 

编辑models/user.rb,增加相应的devise功能 :token_authenticatable

 

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,:token_authenticatable

 

 

 

建立控制器与路由

我们需要建立一个名为Token的控制器作为登陆/获取授权代码的入口

则先配置相应的路由,在config/routes.rb文件中增加以下代码

 

#config/routes.rb  
namespace :api do
    namespace :v1  do
      resources :tokens,:only => [:create, :destroy]
      resources :products
    end
 end

 然后新建相应的tokens_controller.rb文件,首先先写一个登陆登陆的方法

 

 

#controllers/api/v1/tokens_controller.rb
class Api::V1::TokensController  < ApplicationController

    skip_before_filter :verify_authenticity_token
    respond_to :json
    
    def create      
      email = params[:email]
      password = params[:password]
       
       if email.nil? or password.nil?
         render :status=>400,:json=>{:message=>"Password&Username cannot be blank"}
       return
       end

       @user=User.find_by_email(email.downcase)
        
      @user=User.find_by_email(email.downcase)
 
      if @user.nil?
         render :status=>401, :json=>{:message=>"Invalid email or passoword."}
        return
      end

       if not @user.valid_password?(password)
         render :status=>401, :json=>{:message=>"Invalid email or password."}
       else
         render :status=>200, :json=> {:token=>@user.authentication_token}
       end
    end

end

 

 

这样相当于建立一个api路径-localhost:3000/api/v1/tokens.json,顺便说明跳过的这个前置验证器

 

skip_before_filter :verify_authenticity_token

 因为rails默认会为所有Post的form增加一个提交表单用的验证代码,防止站外提交post方法。(《企业应用架构》一书里好似关于这种设计的具体说明)。但是通过手机提交post方法无法获取这段验证代码,所以api部分全部需要忽略这个内建的验证期。

 

 

测试

使用curl测试是不是正常工作

 

 curl -XPOST -d ''  localhost:3000/api/v1/tokens.json

 因为没有输入用户名和密码应该返回一个我们设置的错误信息,{"message":"The request must contain the user email and password."}

 

 

 

如果输入正确的用和用户用户名如

 

 curl -XPOST -d  "email=test@gmail.com&password=123456"  localhost:3000/api/v1/tokens.json 

  则会收到一个正确的应答,并且获取相应用户的authentication_token栏位的值,{"token":"aiSf8jGqyPACcY3Myjxj"}。

 

不使用Devise的验证方法

阅读了Devise的文档,不知道是不是我会错意了,好似如果使用devise内置的auth_token方案,则web部分也会受到波及,需要使用authenticate_user!方法的地方都会额外验证auth_token,还需要修改devise.rb增加配置。

这里使用ruby-china一段很简单的验证方法,

 

  def current_user
    token = params[:auth_token] 
    @current_user ||= User.where(:authentication_token => token).first
  end

  def authenticate!
     render :status=>400,
            :json=>{:message=>"Need login."} unless current_user
  end

 这里相当于重新实现了一个API专用的current_user 和 authenticate_user! 方法。相应的只需要在将来需要进行登陆验证的API中都加入auth_token=xxx的参数即可。

 

 

这里额外写一段需要炎验证的Controller代码进行演示:

 

class Api::V1::ListController.rb < ApplicationController
  before_filter :authenticate!   #验证token
  
  respond_to :json 

  def index
    @lists=List.all.limit(10)
     render :status=>200, :json=> @lists
  end

end

 如果使用curl 进行测试,则额外的需要在get请求中写明auth_token的参数值,例如 

localhost:3000/api/v1/lists.json?auth_token=xxx

 

结束语

这段代码只是演示如果利用Rails与Devise快速的建立一套需要验证的API体系。

 

 

分享到:
评论

相关推荐

    使用Rails&Devise、Rhodes、Rhoconnect的示例应用程序_Ja.zip

    本示例应用程序"使用Rails&Devise、Rhodes、Rhoconnect的示例应用程序_Ja"为我们提供了一个全面了解这三种技术如何协同工作的实例。让我们逐一深入探讨这些技术。 首先,Rails是一个开源的Ruby框架,它遵循MVC...

    使用Rails4Devise和Grape验证API_JavaScript_CSS_下载.zip

    标题中的“使用Rails4Devise和Grape验证API”揭示了这个项目是关于在Ruby on Rails 4框架中实现用户认证的。Devise是一个灵活的身份验证解决方案,它为Rails应用提供了许多常见的身份验证需求,如注册、登录、密码...

    rails-api-4.0.0

    总结,Rails API 4.0.0为开发者提供了一个强大且灵活的框架来构建高质量的RESTful API。通过遵循RESTful设计原则,结合Rails的强大学术和社区支持,开发者可以高效地构建出健壮、可扩展的API服务。

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    假设我们需要为一个博客系统开发用户管理的RESTful API,下面是一个简化的例子: 1. **创建模型**:首先定义User模型,包含用户名、密码等属性。 2. **设置路由**:使用Rails的`routes.rb`文件定义对应的路由规则,...

    rails api(文档)

    Rails API 是一个专门为构建应用程序接口(API)设计的Ruby on Rails框架版本。它专注于提供一套轻量级的工具,使得开发者能够快速、高效地创建RESTful API服务。Rails API的目的是为了提高性能,并减小API服务器与...

    使用Rails、Vue、GraphQL和Devise进行令牌身份验证_Rub.zip

    在本文中,我们将深入探讨如何使用Rails、Vue.js、GraphQL和Devise来构建一个具有令牌身份验证的Web应用。Rails是Ruby on Rails框架,用于后端开发,Vue.js是一种轻量级的前端JavaScript框架,而GraphQL是一种强大的...

    使用Rails5构建的社交网络。使用devise进行身份验.zip

    在本项目中,我们探讨了如何使用Ruby on Rails 5框架构建一个社交网络平台,并集成Devise进行身份验证。Rails是基于MVC(模型-视图-控制器)架构模式的开源Web应用程序框架,它使开发者能够高效地创建数据驱动的网站...

    railsAPI

    Rails API 是一个强大的框架,用于构建高效、可扩展的Web应用程序。它基于Ruby编程语言,遵循MVC(模型-视图-控制器)架构模式,使得开发者可以轻松地处理数据存储、用户界面和业务逻辑。Rails API 特别适用于构建...

    RailsAPI+React+Deviseの认证机能さんプル_Ruby_TypeScript.zip

    标题 "RailsAPI+React+Deviseの认证机能さんプル_Ruby_TypeScript.zip" 提供了一个项目概览,它是一个使用Rails API、React前端和Devise进行身份验证的示例应用。这个项目融合了Ruby on Rails后端开发框架、React...

    ruby on rails 2.3.5 api html版

    Rails是一个基于Ruby语言的开源Web应用程序框架,它遵循模型-视图-控制器(MVC)架构模式,旨在提高开发效率和代码的可读性。 在这个API文档中,你可以找到关于以下关键知识点的详细信息: 1. **Ruby语法基础**:...

    rails+grape+swagger+devise+capistrano 简单融合示例

    总结来说,这个"rails+grape+swagger+devise+capistrano"的简单融合示例展示了一个完整的、功能齐全的API项目架构。Rails作为基础框架,Grape负责API的构建,Swagger用于API的文档化,Devise处理用户认证,而...

    Ruby-Devise一个基于Warden的Rails灵活身份验证解决方案

    这个库是基于Warden,一个通用的身份验证库,允许Devise在Rails应用中实现自定义的身份验证逻辑。 Devise的主要特点包括: 1. **模块化**:Devise通过一系列可插入的模块来实现不同的功能,如确认、密码重置、记住...

    Learning Devise for Rails

    This book is for web developers who are getting started with Rails and are looking for authentication solutions, as well as for Rails developers who are looking to extend their implementation of ...

    在不使用Devise的情况下在RubyonRails中实现API密钥.zip

    在Ruby on Rails框架中,开发API时通常会使用如Devise这样的身份验证库来处理用户认证。然而,有时我们可能需要自己实现API密钥的管理,以满足特定的需求或者避免引入额外的依赖。本教程将深入讲解如何在不使用...

    rails2.3.8 && ruby1.8.7

    Ruby on Rails(通常简称为Rails)是一个基于Ruby语言的开源Web应用程序框架,它遵循模型-视图-控制器(MVC)架构模式,用于简化Web应用的开发。Ruby 1.8.7是这个框架运行所依赖的特定版本的Ruby解释器。 描述中...

    rails-devise, Rails 5.0启动应用程序,带有认证功能.zip

    rails-devise, Rails 5.0启动应用程序,带有认证功能 Rails 和设计Rails 5.0示例应用程序提供身份验证和用户管理。设计用于用户管理和认证的插件Bootstrap 或者基金会的前端框架使用这里示例应用程序作为你自己的...

    ruby on rails api

    描述中的“方便查阅”意味着这个CHM文件可能是一个组织良好的Rails API参考手册,便于开发者快速查找和理解Rails的各种API用法。 在Rails中,一些关键的API知识点包括: 1. **ActiveRecord**:这是Rails的核心组件...

    使用rails6开发纯后端API项目.zip

    Rails作为一个强大的Ruby框架,提供了丰富的功能来帮助开发者高效地构建API服务。下面我们将详细探讨Rails 6在构建API项目中的关键知识点。 1. **创建API项目** 使用Rails 6创建一个新的API项目非常简单,只需在...

    rails_grape_auth:用于devise_token_auth + grape_devise_token_auth的测试Rails应用

    标题中的“rails_grape_auth”是一个专门为Rails应用设计的组件,用于实现身份验证功能,它与“devise_token_auth”和“grape_devise_token_auth”这两个库相结合,提供了RESTful API的身份验证解决方案。...

Global site tag (gtag.js) - Google Analytics