2016-03-15 5 views
0

У меня есть сайт rails с пользователями, и эти пользователи могут создавать определенные страницы.Контроллер Rails: аутентификация только для определенных действий

Я пытаюсь сделать эти страницы доступными для просмотра людям, не вошедшим в систему. Итак, я делаю другое представление & действия контроллера для страницы.

В настоящее время единственной проблемой, с которой я столкнулся, является создание контроллера, который имеет одно действие, требующее аутентификации, и другое действие, которое не выполняется, оставаясь на том же контроллере.

То, что я

class PageController < ApplicationController 
    before_action :authenticate_user! 
    skip_before_filter :verify_authenticity_token 
    respond_to :json 


    def show 
     @page = Page.new 
     .... 
    end 
    .... 
end 

То, что я хочу

class PageController < ApplicationController 
    if params[:action] != 'show_public' 
     before_action :authenticate_user! 
     skip_before_filter :verify_authenticity_token 
    end 
    respond_to :json 



    def show 
     @page = Page.new 
     @current_user = current_user 
     .... 
    end 

    def show_public 
     @page = Page.new 
     .... 
    end 
    .... 
end 

Ошибка, которую я в настоящее время получаю:

undefined local variable or method `params' for PagesController:Class 

Примечание

Кто-то другой сделал большую часть кода для этого сайта (и с тех пор слева), и я новичок в рельсах. Итак, если я собираюсь решить эту проблему с совершенно неправильным подходом, пожалуйста, дайте мне знать.

ответ

2

Вы можете сделать это следующим образом:

before_action :authenticate_user!, only: [:show] 

Так что это будет работать только на show действия. Иногда вам нужно запустить на всех и оставить один так:

before_action :authenticate_user!, except: [:show] 

Так что это не будет работать на show, но будет работать на всех других действий. И пусть ваш before_action в контроллере приложения, и вы должны пропустить в унаследованных контроллерах вы можете сделать это следующим образом:

skip_before_action :require_login, only: [:show] 
+0

Спасибо, есть способ проверки подлинности для всего, кроме show_public? – Rorschach

+2

', за исключением: [: show_public]', конечно. –

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