使用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"为我们提供了一个全面了解这三种技术如何协同工作的实例。让我们逐一深入探讨这些技术。 首先,Rails是一个开源的Ruby框架,它遵循MVC...
标题中的“使用Rails4Devise和Grape验证API”揭示了这个项目是关于在Ruby on Rails 4框架中实现用户认证的。Devise是一个灵活的身份验证解决方案,它为Rails应用提供了许多常见的身份验证需求,如注册、登录、密码...
总结,Rails API 4.0.0为开发者提供了一个强大且灵活的框架来构建高质量的RESTful API。通过遵循RESTful设计原则,结合Rails的强大学术和社区支持,开发者可以高效地构建出健壮、可扩展的API服务。
假设我们需要为一个博客系统开发用户管理的RESTful API,下面是一个简化的例子: 1. **创建模型**:首先定义User模型,包含用户名、密码等属性。 2. **设置路由**:使用Rails的`routes.rb`文件定义对应的路由规则,...
Rails API 是一个专门为构建应用程序接口(API)设计的Ruby on Rails框架版本。它专注于提供一套轻量级的工具,使得开发者能够快速、高效地创建RESTful API服务。Rails API的目的是为了提高性能,并减小API服务器与...
在本文中,我们将深入探讨如何使用Rails、Vue.js、GraphQL和Devise来构建一个具有令牌身份验证的Web应用。Rails是Ruby on Rails框架,用于后端开发,Vue.js是一种轻量级的前端JavaScript框架,而GraphQL是一种强大的...
在本项目中,我们探讨了如何使用Ruby on Rails 5框架构建一个社交网络平台,并集成Devise进行身份验证。Rails是基于MVC(模型-视图-控制器)架构模式的开源Web应用程序框架,它使开发者能够高效地创建数据驱动的网站...
Rails API 是一个强大的框架,用于构建高效、可扩展的Web应用程序。它基于Ruby编程语言,遵循MVC(模型-视图-控制器)架构模式,使得开发者可以轻松地处理数据存储、用户界面和业务逻辑。Rails API 特别适用于构建...
标题 "RailsAPI+React+Deviseの认证机能さんプル_Ruby_TypeScript.zip" 提供了一个项目概览,它是一个使用Rails API、React前端和Devise进行身份验证的示例应用。这个项目融合了Ruby on Rails后端开发框架、React...
Rails是一个基于Ruby语言的开源Web应用程序框架,它遵循模型-视图-控制器(MVC)架构模式,旨在提高开发效率和代码的可读性。 在这个API文档中,你可以找到关于以下关键知识点的详细信息: 1. **Ruby语法基础**:...
总结来说,这个"rails+grape+swagger+devise+capistrano"的简单融合示例展示了一个完整的、功能齐全的API项目架构。Rails作为基础框架,Grape负责API的构建,Swagger用于API的文档化,Devise处理用户认证,而...
这个库是基于Warden,一个通用的身份验证库,允许Devise在Rails应用中实现自定义的身份验证逻辑。 Devise的主要特点包括: 1. **模块化**:Devise通过一系列可插入的模块来实现不同的功能,如确认、密码重置、记住...
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 ...
在Ruby on Rails框架中,开发API时通常会使用如Devise这样的身份验证库来处理用户认证。然而,有时我们可能需要自己实现API密钥的管理,以满足特定的需求或者避免引入额外的依赖。本教程将深入讲解如何在不使用...
Ruby on Rails(通常简称为Rails)是一个基于Ruby语言的开源Web应用程序框架,它遵循模型-视图-控制器(MVC)架构模式,用于简化Web应用的开发。Ruby 1.8.7是这个框架运行所依赖的特定版本的Ruby解释器。 描述中...
rails-devise, Rails 5.0启动应用程序,带有认证功能 Rails 和设计Rails 5.0示例应用程序提供身份验证和用户管理。设计用于用户管理和认证的插件Bootstrap 或者基金会的前端框架使用这里示例应用程序作为你自己的...
描述中的“方便查阅”意味着这个CHM文件可能是一个组织良好的Rails API参考手册,便于开发者快速查找和理解Rails的各种API用法。 在Rails中,一些关键的API知识点包括: 1. **ActiveRecord**:这是Rails的核心组件...
Rails作为一个强大的Ruby框架,提供了丰富的功能来帮助开发者高效地构建API服务。下面我们将详细探讨Rails 6在构建API项目中的关键知识点。 1. **创建API项目** 使用Rails 6创建一个新的API项目非常简单,只需在...
标题中的“rails_grape_auth”是一个专门为Rails应用设计的组件,用于实现身份验证功能,它与“devise_token_auth”和“grape_devise_token_auth”这两个库相结合,提供了RESTful API的身份验证解决方案。...