📅  最后修改于: 2020-10-20 05:20:25             🧑  作者: Mango
Rails提供了多种实现身份验证和授权的方式。但是最简单的一个是新模块,它已在Rails 2.0中添加。该模块是通过SSL进行API身份验证的好方法。
要使用此身份验证,您将需要使用SSL进行流量传输。在我们的教程中,我们将在没有SSL的情况下对其进行测试。
让我们从在整个教程中讨论过的库示例开始。我们没有太多要做的事情来实现认证。我们将在〜library / app / controllers / book_controller.rb中以蓝色添加几行:
最后,您的book_controller.rb文件将如下所示-
class BookController < ApplicationController
USER_ID, PASSWORD = "zara", "pass123"
# Require authentication only for edit and delete operation
before_filter :authenticate, :only => [ :edit, :delete ]
def list
@books = Book.find(:all)
end
def show
@book = Book.find(params[:id])
end
def new
@book = Book.new
@subjects = Subject.find(:all)
end
def create
@book = Book.new(params[:book])
if @book.save
redirect_to :action => 'list'
else
@subjects = Subject.find(:all)
render :action => 'new'
end
end
def edit
@book = Book.find(params[:id])
@subjects = Subject.find(:all)
end
def update
@book = Book.find(params[:id])
if @book.update_attributes(params[:book])
redirect_to :action => 'show', :id => @book
else
@subjects = Subject.find(:all)
render :action => 'edit'
end
end
def delete
Book.find(params[:id]).destroy
redirect_to :action => 'list'
end
def show_subjects
@subject = Subject.find(params[:id])
end
private
def authenticate
authenticate_or_request_with_http_basic do |id, password|
id == USER_ID && password == PASSWORD
end
end
end
让我们解释这些新行-
第一行只是定义用于访问各个页面的用户ID和密码。
在第二行中,我们放置了before_filter ,用于在控制器中的任何操作之前运行配置的方法authenticate 。通过声明要包括或排除的动作,可以将过滤器限制为特定的动作。这两个选项都接受单个动作(:only =>:index)或动作数组(:except => [:foo,:bar])。因此,这里我们仅对编辑和删除操作进行身份验证。
由于第二行,每当您尝试编辑或删除帐簿记录时,它将执行私有验证方法。
私有身份验证方法正在调用uthenticate_or_request_with_http_basic方法,该方法由一个块组成,并显示一个对话框,要求输入用户ID和密码。如果输入正确的用户名和密码,它将继续进行,否则将显示“拒绝访问”。
现在,尝试编辑或删除任何可用的记录,为此,您将必须使用以下对话框来完成身份验证过程。