2014-12-10 9 views
1

레일 인증에 문제가 있습니다. 나는 Devise를 사용하지 않고있다. 어떤 이유로 든 앱에 로그인해도 문제가 없지만 새 계정을 만들 때 리디렉션하려고하면 current_user가 0이됩니다. 어떤 충고?레일즈 4 스크래치로부터의 사용자 인증 Current_user == nil?

사용자 모델

class UsersController < ApplicationController 
before_action :set_user, only: [:show] 

def create 
    @user = User.new(user_params) 
    if @user.save 
     flash[:notice] = "Welcome to the site" 
     redirect_to current_user 
    else 
     flash[:notice] = "There was a problem creating your account. Please try again." 
     render new 
    end 
end 

def new 
    @user = User.new 
end 

def show 
    @locations = current_user.locations 
    @appointments = current_user.appointments 
end 

def index 
end 

private 

def set_user 
    @user = User.find_by_email(params[:id]) 
end 

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


end 

세션 컨트롤러

def create 
    user = User.find_by_email(params[:email]) 
    if user && user.authenticate(params[:password]) 
     session[:user_id] = user.id 
     redirect_to current_user 
    else 
     flash.now[:error] = "There was a problem authenticating." 
     render action: 'new' 
    end 
end 

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

당신은 새 사용자를 저장 한 후 리디렉션 이전 session[:user_id] = user.id이 필요합니다

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

helper_method :current_user 
+0

그냥 사용자가 만든 만들 행동 :

당신은 이런 식으로 뭔가를 시도 할 수 있습니다. 그냥'redirect_to @ user' –

답변

1

가입시 사용자는 만들었지 만 세션은 생성하지 않았습니다. current_user를 찾으면 세션 [: user_id]에 값이 없습니다.

또한 current_user 메서드가 모델에서 보이지 않는다고 생각합니다. 그 요구에 더 CURRENT_USER 아직 없다 그래서

class UsersController < ApplicationController 
    before_action :set_user, only: [:show] 

    def create 
    @user = User.new(user_params) 
    if @user.save 
     flash[:notice] = "Welcome to the site" 
     session[:user_id] = @user.id   # <===== 
     redirect_to @user      # <===== 
    else 
     flash[:notice] = "There was a problem creating your account. Please try again." 
     render new 
    end 
    end 

    ... 
end 
+0

그건 완벽한 @roob이야. 나는 사용자를 인증 한 후에 세션 [: user_id]을 할당했으나 사용자를 생성 한 후에는 할당하지 않았습니다. 감사! –

0

응용 프로그램 컨트롤러. 설정하지 않았으므로 사용자를 생성 할 때 session[:user_id]은 nil입니다.

관련 문제