LINUX.ORG.RU

РоР: добавление авторизации


0

0

Имеется сгенерённый скаффолдом список постов, пытаюсь добавить авторизацию. Вручную создал views/posts/login.html.erb, добавил в контроллер before_filter :authorize; login; authorize.

Получил... бесконечный цикл при попытке захода в authorize.

The webpage at http://localhost:3000/posts/login has resulted in too many redirects. ...

Помогите найти косяк.

class PostsController < ApplicationController

  before_filter :authorize, :except => [:login]

  def login
    session[:user_id] = nil

    if request.post?
      user = User.authenticate(params[:name], params[:password])
      if user
        session[:user_id] = user.id
        redirect_to(:action => "index" )
      else
        flash.now[:notice] = "Invalid user/password combination"
      end
    end
  end

  # GET /posts
  # GET /posts.xml
  def index
    @posts = Post.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @posts }
    end
  end

  # GET /posts/new
  # GET /posts/new.xml
  def new
    @post = Post.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @post }
    end
  end

  private

  def authorize
    unless User.find_by_id(session[:user_id])
      flash[:notice] = "Please log in"
      redirect_to :action => :login
    end
  end

end

p.s. update, edit, destroy вырезал здесь за ненадобностью их показа.

Надо добавить, что шаблон login не рендерится.

Может оно по той же самой причине происxодит, почему нельзя (вернее, у меня не получается) добавить новую акцию в контролер, сгенерированный cript/generate scaffold? Т.е. сгенерили систему классов скаффолдом, добавляем вручную в контроллер def test и создаём views/foo/test.html.erb, при попытке вызова bar/foo/test, test показан не будет, будет ошибка «элемент с ID=test не существует».

Вот у меня здесь шаблон логин не показывается. Ни при попытке явно его вызвать, ни при заходе в index, когда дёргается authorize и происxодит редирект на login.

TirNaNOg ()
Ответ на: комментарий от TirNaNOg

a в routes добавил login?
типа map.resources :posts. :collection => [ :login => :any]

хотя ошибка была бы другая.

попробуй ребутнуть сервер

kelyar ★★★★★ ()
Ответ на: комментарий от kelyar

Насколько понял (убился винчестер, переставляю систему), ошибка именно в отсутствующей записи в routes, я не знал о необходимости добавления записей туда, теперь буду знать. -) Думаю, вопрос исчерпан.

TirNaNOg ()

То что ты хочешь добавить называется аутентификацией, авторизация — это когда ты определяешь может ли чувак что-то проделать с определенным ресурсом. Используй уже github://devise.

ZveN ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.