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 вырезал здесь за ненадобностью их показа.



Последнее исправление: TirNaNOg (всего исправлений: 1)

Надо добавить, что шаблон 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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.