2015-04-11 3 views
0

Я создаю приложение для рельсов, и до сих пор я создал довольно обычную систему регистрации/входа в систему, в основном, следуя этому railcast, который я нашел благодаря переполнение стека. Я оставил все так же, как и ретрансляцию, использовал только сильные параметры вместо attr_accessible и добавил к таблице дополнительные поля (имя пользователя, bio, img url).Планирование приложения Ruby on Rails - логин системы входа в систему, когда он не вошел в систему

Теперь я хочу, чтобы мое приложение перенаправляло пользователей на мою страницу входа, если они не вошли в систему, независимо от того, на какой странице они пытаются получить доступ, и если да, то перенаправляйтесь к нормальному пути. В настоящее время моей страницей логирования является мой root_path. Нужно ли это делать во всех контроллерах отдельно или я могу просто написать это в свой appController? Как я могу написать контроллер? Я думал, что-то вроде этого:

if session[:user_id] == nil 
    redirect_to login_path 
else 
    redirect_to current_controller_path 
end 

Теперь, как я могу проверить, если пользователь вошел в систему, и как я могу перенаправить на пути тока контроллера (например, articles_index_path

Я новичок в Ruby On Rails? и все еще пытается обернуть вокруг головы модели, представления и контроллеры, поэтому, пожалуйста, предположим, я ничего не знаю, когда написание объяснений :) Спасибо за помощь

о Я использую Rails 4 с рубином 2.2.1

+0

Вы должны распаковать 2-ое сомнение (тот хороший Ques), который относительно использования памяти от этого вопроса к новой. Таким образом, другие пользователи смогут получить выгоду от обоих вопросов. Здесь его получение исчезло – RAJ

ответ

1

Вам необходимо добавить before_filter в вашем ApplicationController, чтобы проверить аутентификацию пользователя.

class ApplicationController < ActionController::Base 
    ... 
    before_filter :authenticate_user! 

    ... 
    private 
    def authenticate_user! 
    redirect_to login_path unless session[:user_id] 
    end 
end 

Теперь убедитесь, что пользователь должен быть зарегистрирован в течение доступа к любому действию любого контроллера, в том числе регистрации, и других зарегистрировались действий, которые должны быть доступны для не-зарегистрированных пользователей тоже.

Вам необходимо убедиться, что вы пропустите выше before_filter, где вы не хотите, чтобы пользователь регистрировался, например, регистрируясь, подписал, о нас, свяжитесь с нами и так далее.

Для примера:

class SessionsController < ApplicationController 
    skip_before_filter :authenticate_user!, :except => :destroy 
    ... 

    def new 
    ... 
    end 

    def create 
    ... 
    end 

    ... 
end 

Вы можете прочитать больше о skip_before_filter на APIDock

+0

Теперь я получаю 'undefined method' authenticate_user! ' для ApplicationController: Class'. Я отредактирую свой контроллер на главный пост, если вы заметите что-то очевидное. –

+0

Не было двоеточия. 'authenticate_user!' должен быть ': authenticate_user!' – RAJ

+0

Спасибо. Я обновил его, и он работает. Также отредактировал вопрос так, как вы предложили, откроет новую информацию о переменной @current_user в бит, сначала попробуем ее. Я также удалил код, который вы предоставили, из оригинального вопроса, не используя его дважды. –

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