2013-02-23 3 views
2

Я только начал изучать рубин-на-рельсы, используя этот материал: http://guides.rubyonrails.org/getting_started.htmlhttp_basic_authenticate_with не работает. Зачем?

И я остановился на этом шаге:

10 Security

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]) 

    [...] 

И Ждут» т работы. Я имею в виду, нет подсказки для пароля и входа в систему, и нет ошибки. Я просто сделал это, и ничего не изменилось.

Может кто-нибудь помочь мне с этим или хотя бы указать мне в правильном направлении, чтобы решить проблему?

+2

Какие действия вы вызываете там, где нет запроса на аутентификацию? В вашем первом примере 'index' и' show' не будут запрашивать пароль, во втором примере только 'destroy' будет защищен паролем. –

+0

Я понимаю это. Но я могу уничтожить, создать и сделать все возможное без запроса авторизации. Вот где проблема. Код просто не работал, и мне было интересно, почему. – uhthska

ответ

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] 

Очевидно, что эта строка кода (как указано begore) будет работать только на Rails 3.2 (я на самом деле думаю, что он должен работать на 3.1 тоже) или более.

+1

Не работает с Rails-4.2. * Версия как дающая ошибку "неопределенный метод' http_basic_authenticate_with 'для " –

Смежные вопросы