2014-06-18 2 views
0

로그인 할 때 세션이 작동하고 로그 아웃 할 수 있습니다. 그러나 계정을 만들면 로그 아웃 할 수있는 링크가 없습니다. 어떤 제안? 여기 로그인시 세션 처리

은/application.html.erb 레이아웃을 로그 아웃하기위한 코드

여기
<!DOCTYPE html> 
<html> 
<head> 
    <title>Auth</title> 
    <%= stylesheet_link_tag "application", media: "all", 
              "data-turbolinks-track" => true %> 
    <%= javascript_include_tag "application", "data-turbolinks-track" => true %> 
    <%= csrf_meta_tags %> 
</head> 
<body> 
<!--Detta kod säger bara när du loggar in ska man kunna se länkarna... du måste skriva om den så att den säger bara 
när du är inloggad ELLER skapat konto visa dessa länkar--> 
<div id="user_nav"> 
    <% if current_user %> 
    Logged in as <%= current_user.email %> DETTA ÄR APPLICATION.HTML.ERB. 
    <%= link_to "Log out", log_out_path %> 
    <% else %> 
    <%= link_to "Sign up", sign_up_path %> or 
    <%= link_to "log in", log_in_path %> 
    <% end %> 
</div> 

<% flash.each do |name, msg| %> 
    <%= content_tag :div, msg, :id => "flash_#{name}" %> 
<% end %> 

<%= yield %> 

</body> 
</html> 

여기

class SessionsController < ApplicationController 

    #auth 
    #behöver new defineras? ska den vara tom? varför måste den finnas? ny session? 
    #är det korrekt att skriva params[:blabla] etc? 
    #varför kickar sessions in bara när man loggar in? och inte när man skapat konto? 

def new 
end 

    #det känns som sessions skapas bara när man loggar in.. AKA AUTHENTICATE 
def create 
    user = User.find_by_email(params[:email]) 
    if user && user.authenticate(params[:password]) 
     session[:user_id] = user.id 
     redirect_to testsida_url, notice: "Logged in!" 
    else 
     flash.now.alert = "Email or password is invalid" 
     render "new" 
    end 
    end 

def destroy 
    session[:user_id] = nil 
    redirect_to root_url, :notice => "Logged out!" 
end 

end 

사용자 제어기 여기

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_params) 
    if @user.save 
     redirect_to testsida_url, :notice => "Signed up!" 
    else 
     render "new" 
    end 
    end 

    def update 
    if @user.update_attributes(user_params) 
     flash[:success] = "Profile updated" 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 

    def user_params 
    params.require(:user).permit(:email, :password, :password_confirmation) 
    end 

end 

이다 sessions_controller 인 애플리케이션 컨트롤러

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 
    helper_method :current_user 

private 

    def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    def authorize 
    redirect_to login_url, alert: "Not authorized" if current_user.nil? 
    end 
end 

그래서 계정을 만들 때 세션이 작동하지 않는 이유를 알지만 로그인 할 때 작동합니까? : S

답변

1

user을 새로 만들면 session도 새로 만들지 않거나 적어도 자신이있는 것처럼 보이지는 않습니다. 가장 쉬운 방법은 새 사용자를 만들 때 :user_id 세션 변수를 설정하는 것입니다.

class UsersController < ApplicationController 
    # new 

    def create 
    @user = User.new(user_params) 
    if @user.save 
     # Set the current user id below 
     session[:user_id] = @user.id 
     redirect_to testsida_url, :notice => "Signed up!" 
    else 
     render "new" 
    end 
    end 

    # user_params 
end 
+0

예, 로그인 할 때 세션에서 ID를 설정해야합니다. – Ahmed

+0

좋습니다. id는 어떻게 설정합니까? 그 코드는 어떻게 생겼을까요? –

+0

내 코드에서 주석 아래에있는 줄은'session [: user_id] = user.id'입니다. –