Вход и выход из Rails 3 зависят от пользовательских куки - PullRequest
1 голос
/ 20 марта 2012

Я хочу, чтобы на моей домашней странице отображались слова logout и путь link_to logout_path, отображаемый при входе пользователя в систему.

У меня это работало, но я только что реализовал переключатель "Запомнить меня" и сдвиг отиспользование user.id для распознавания пользователя в auth_token, похоже, испортило мои операторы if и else.Я действительно не могу понять, что мне нужно изменить.

У меня есть следующее:

Контроллер сеансов

class SessionsController < ApplicationController
def new
end

def create
    user = User.find_by_email(params[:email])
    if user && user.authenticate(params[:password])
        if params[:remember_me]
        cookies.permanent[:auth_token]
        else
        cookies[:auth_token]
        end
        redirect_to root_url
    else
        flash.now.alert = "Invalid email or password!"
        render "signup"
    end
end

def destroy
    cookies.delete(:auth_token)
    redirect_to root_url
end

end

Соответствующая область моей домашней страницы:

<div class="login">
                <li><% if session[:user_id] %>
                    <!-- user is logged in -->
                    <%= link_to "Logout", logout_path %>
                    <% else %>
                <!-- user is not logged in -->
                    <%= link_to "Login", login_path %>
                    /
                    <%= link_to "Sign up", signup_path %>
                <% end %></li>
            </div>

Моя модель пользователя

class User < ActiveRecord::Base
has_secure_password
before_create { generate_token(:auth_token) }

validates_presence_of :password, :on => :create
validates_presence_of :email
validates_length_of :email, :within => 6..50
validates_length_of :password, :within => 6..30
validates_uniqueness_of :email, :case_sensitive => false, :on => :create
validates_format_of :email,    :with => /^[A-Z0-9_.%-]+@([A-Z0-9_]+\.)+[A-Z]{2,4}$/i,
                                :message => "must be a valid e-mail address"

def generate_token(column)
begin
    self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end

end

Контроллер моего приложения:

class ApplicationController < ActionController::Base
protect_from_forgery

private

def current_user
@current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if  cookies[:auth_token]
end
end

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

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...