2017-01-25 4 views
0

У меня проблемы с сохранением моих сессий.Рельсы 5 сеансов не сохраняются

Я могу войти/зарегистрировать пользователя в порядке, но сеанс исчезает, когда мой пользователь нажимает на любую ссылку в моем приложении. Я прочитал несколько других StackOverflow, которые сказали, что мне нужен protect_from_forgery with: :exception в моем ApplicationController, который есть .., а также что мне нужен <%= csrf_meta_tags %> в моем макете application.html.erb, который также есть. Итак, я немного потерял.

Мой sessions_controller.rb:

class SessionsController < ApplicationController 
    def new 
    end 

    def create 
    user = User.find_by(username: params[:session][:username]) 
    if user && user.authenticate(params[:session][:password]) 
     #Log the user in and redirect to the user's show page (for now) 
     log_in user 
     redirect_to user_path(user) 
    else 
     flash.now[:danger] = 'Invalid username/password combination' 
     render 'new' 
    end 
    end 

    def destroy 
    logout 
    end 
end 

мой sessions_helper.rb:

module SessionsHelper 

    # Logs in the given user. 
    def log_in(user) 
    session[:user_id] = user.id 
    end 

    # Returns the current logged-in user (if there is one). 
    def current_user 
    @current_user ||= User.find_by(id: session[:user_id]) 
    end 

    # Returns true if user is successfully logged in. 
    def logged_in? 
    !current_user.nil? 
    end 

    # Logs out current user. 
    def logout 
    session.delete(:user_id) 
    @current_user = nil 
    end 
end 

мой application_controller.rb:

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    include SessionsHelper 
end 

и, наконец, моя application.html.erb

<!DOCTYPE html> 
<html> 
    <head> 
    <title>RailsOnlineShop</title> 
    <%= csrf_meta_tags %> 

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 
    </head> 

    <body> 
    <% if logged_in?%> 
    <%= link_to "HOME", items_path %> | <%= link_to "PROFILE", current_user %> | <%= link_to "LOGOUT", logout %> 
    <% else %> 
    <%= link_to "HOME", items_path %> | <%= link_to "REGISTER", new_user_path %> | <%= link_to "LOGIN", login_path %> 
    <% end %> 
    <%= yield %> 
    </body> 
</html> 

Я чувствую, что я проверил везде, что имеет смысл, но я мог что-то упустить.

+0

Вы испортили конфигурацию/инициализаторы/session_store.rb? Взгляните на этот ответ SO http://stackoverflow.com/questions/8537332/session-data-disappearing – MilesStanfield

+0

Я бы начал с написания функционального теста, чтобы проверить, что данные сеанса сохраняются в разных запросах? Этот процесс поможет вам понять, что происходит. – Midwire

ответ

1

Я узнал, в чем была моя проблема. В моей application.html.erb моя ссылка на выход была неправильной и заставила моего пользователя выйти из системы сразу же после входа в систему.

У меня было <%= link_to "LOGOUT", logout %>, когда это должно было быть <%= link_to "LOGOUT", logout_path, method: :delete %>.

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