2016-04-13 6 views
0

Hallo Ich habe mit diesem aus den letzten paar Stunden gekämpft, immer noch kann ich nicht herausfinden, wo es falsch geht.Wert aus Sitzung in Schienen nicht 5

Ich gründe die session mit user_id in SessionsController wie dieses

class SessionsController < ApplicationController 

skip_before_action :authenticate, except: [:logout] 

def new 
    @session = Session.new 
end 

def create 
@user_session = Session.new(session_params) 

if @user_session.valid? 
    session[:user_id] = @user_session.user_id 
    redirect_to learners_url 
else 
    redirect_to learner_new_registrations 
end 
end 

def logout 
    session[:user_id] = nil 
    redirect_to root_url 
end 

private 

def session_params 
    params.require(:session).permit(:email, :password) 
end 

Ende

in create Aktion nach Sitzungswert einstellt es learners_url wird Umleitung, aber auch hier ist es Umleitung URL zu verankern. Beachten Sie die folgenden server log

Started POST "/sessions" for 127.0.0.1 at 2016-04-13 12:00:01 +0530 
Processing by SessionsController#create as HTML 
    Parameters: {"session"=>{"email"=>"[email protected]", "password"=>"[FILTERED]"}, "login-submit"=>"Submit"} 
Can't verify CSRF token authenticity 
MONGODB | localhost:27017 | project_practice_development.find | STARTED | {"find"=>"users", "filter"=>{"email"=>"[email protected]"}, "limit"=>-1} 
MONGODB | localhost:27017 | project_practice_development.find | SUCCEEDED | 0.000360343s 
Redirected to http://localhost:3000/learners 
Completed 302 Found in 67ms 


Started GET "/learners" for 127.0.0.1 at 2016-04-13 12:00:01 +0530 
Processing by LearnersController#index as HTML 
MONGODB | localhost:27017 | project_practice_development.find | STARTED | {"find"=>"users", "filter"=>{"_id"=>nil}} 
MONGODB | localhost:27017 | project_practice_development.find | SUCCEEDED | 0.000387588s 
Redirected to http://localhost:3000/ 
Filter chain halted as :authenticate rendered or redirected 
Completed 302 Found in 2ms 


Started GET "/" for 127.0.0.1 at 2016-04-13 12:00:01 +0530 
Processing by WelcomesController#about as HTML 
    Rendered welcomes/about.html.erb within layouts/welcomes (0.2ms) 
Completed 200 OK in 16ms (Views: 15.4ms) 

Es bedeutet, es wird LearnersController#Index Aktion umleiten. In ApplicationController habe ich ein call back wie diese

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

    before_action :authenticate 

    def authenticate 
    return if signed_in? 
    redirect_to root_url 
    end 

    def current_user 
    @current_user ||= User.find(session[:user_id].to_s) #Problem is here. Here i am unable to access session[:user_id] which i was set in sessions controller. so it is redirecting to `root_url` 
    rescue Mongoid::Errors::DocumentNotFound => ex 
    end 

    def signed_in? 
    current_user.present? 
    end 

    helper_method :authenticate? 
end 

Hilfe gesetzt mir, es zu lösen. Warum konnte ich session[:user_id] Werte in Anwendungscontroller nicht verwenden? Danke im Voraus. Hinweis: Ich bin mit Schienen 5.0.0.beta3 Version

Antwort

0

Sie nie Sitzung erstellt, versuchen Sie dies:

def create 
#@user_session = Session.create(session_params) 
user = User.find_by(email: params[:session][:email].downcase) 
if user && user.authenticate(params[:session][:password]) 
    session[:user_id] = user.id 
    redirect_to learners_url 
else 
    redirect_to learner_new_registrations 
end 
end 

Da haben Sie nicht authentifizierte Benutzer. In Ihrer ApplicationController haben Sie eine Methode namens authenticate. Es prüft zuerst, ob der Benutzer signed_in? ist oder nicht. Wenn nicht, leitet es Sie an die root_url weiter.

def authenticate 
    return if signed_in? 
    redirect_to root_url 
end 
+0

Dies ist, was ich in 'SessionsController # Create' Aktion getan habe. Was ist der Unterschied? @ dkp –

+0

In 'def current_user @aktueller_benutzer || = User.find (sitzung [: user_id] .to_s) #put session [: user_id] gibt mir null nachdem ich authentifiziert habe. Rettung Mongoid :: Fehler :: DocumentNotFound => ex Ende' –

+0

'Sitzung [: user_id] = @ user_session.user_id' - Sie haben diese Anweisung in Ihrer erstellen Aktion. Sie sollten den Benutzer von DB wie '@user = User.find_by_email (params []): email' erhalten. Dann können Sie den Benutzer authentifizieren und die Sitzung wie folgt einstellen: 'session [: user_id] = @ user.id' – dp7