2

我刚开始使用这些东西学习 ruby​​-on-rails:http: //guides.rubyonrails.org/getting_started.html

我停在这一步:

10 安全

class PostsController < ApplicationController
  http_basic_authenticate_with :name => "dhh", :password => "secret", :except => [:index, :show]

  # GET /posts
  # GET /posts.json
  def index
    @posts = Post.all
    respond_to do |format|

    [...]


class CommentsController < ApplicationController
  http_basic_authenticate_with :name => "dhh", :password => "secret", :only => :destroy

  def create
    @post = Post.find(params[:post_id])

    [...]

它没有用。我的意思是,没有提示输入密码和登录,也没有错误。我只是这样做了,没有任何改变。

有人可以帮我解决这个问题,或者至少为我指出解决问题的正确方向吗?

4

1 回答 1

1

这取决于您拥有的 Rails 版本。如果它是 3.2,它应该可以正常工作,正如您在页面顶部看到的那样:

本指南基于 Rails 3.2。此处显示的某些代码不适用于早期版本的 Rails。

因此,您可能想先检查一下,然后如果您的版本是较早的版本,请尝试以下操作:

class ApplicationController < ActionController::Base
USER, PASSWORD = 'dhh', 'secret'

before_filter :authentication_check, :except => :index

#Any other method

 private
  def authentication_check
   authenticate_or_request_with_http_basic do |user, password|
    user == USER && password == PASSWORD
   end
  end
end

它应该可以正常工作。然后,最后一个选项,您可能已经提供了一次正确的凭据,现在应用程序会记住它是您并允许您执行所有操作,因此(只是为了确定)尝试在其他任何内容中更改用户名。您想编辑该行使其看起来像这样:

http_basic_authenticate_with :name => "anotherName", :password => "secret", :except => [:index, :show]

显然,这行代码(如前所述)只能在 Rails 3.2 上工作(我实际上认为它也应该在 3.1 上工作)或更高版本。

于 2013-03-15T10:24:39.817 回答