2015-06-30 3 views
3

Я использую драгоценный камень под названием omniauth-facebook, с которым мне удалось реализовать аутентификацию пользователя facebook.Почему в этой ситуации не отлаживается работа?

Это выглядит нормально, но не передает данные всего объекта в представление. Это просто говорит ноль.

Он должен показывать множество вещей при использовании «отладки» или «проверки». Он показывает содержимое сеанса [: name] как-то.

Контроллер

class SessionsController < ApplicationController 
    def create 
     @auth = request.env["omniauth.auth"] 
     session[:oauth_token] = @auth.credentials.token 
     session[:username] = @auth.extra.raw_info.username 

     session[:name] = @auth.extra.raw_info.name 
     redirect_to bookd_url, :notice => "Signed in!" 
    end 
end 

Посмотреть

<% if signed_in? %> 
    <%= @auth.inspect %> 
    <%= debug @auth %><br /> 
    <%= session[:name] %> 
<% end %> 

Выходной HTML

nil 
--- 
... 
John 
+1

Какова ценность '@ auth'? - можете ли вы попробовать поставить '<% = @ auth.inspect%>' перед тегом debug erb? –

+0

@MaxWilliams Спасибо за комментарий. Он возвращает нуль. – HUSTEN

+0

Это так странно, потому что оно возвращает правильное имя, если я код '@ auth.extra.raw_info.name' в представлении. – HUSTEN

ответ

2

Ваш создать контроллер Дейс n осуществляет перенаправление. После перенаправления процесс начнется с нуля, и @auth больше не будет определяться. Если вы сделаете представление в этот момент, @auth будет нулевым. Это твоя проблема.

Вам нужно подумать о том, что вы пытаетесь сделать здесь. Вы устанавливаете переменную @auth из данных аутентификации в исходном запросе. Затем вы используете это, чтобы установить некоторые данные в сеансе, который записывает, кто, например, регистрируется. Затем, на следующей странице, где пользователь вошел в систему, вы хотите посмотреть на @auth. Это не имеет никакого смысла: после того, как вы аутентифицировали пользователя, все, о чем вам нужно заботиться, это помнить, какой пользователь в настоящий момент зарегистрирован. Вам не нужно хранить данные о том, как они вошли в систему, и на самом деле вы, вероятно, не должно.

Вы должны вместо этого делать что-то вроде этого:

#in ApplicationController, protected section 
protected 

def current_user 
    if @current_user 
    return @current_user 
    elsif session[:username] 
    @current_user = User.find_by_username(session[:username]) 
    return @current_user 
    end 
end 

Это позволит вам писать current_user в контроллере и просматривать код, чтобы получить доступ к пользователю, который аутентификация, первоначально, который вся причина для регистрации кто-то из них и их регистрация.

+0

Спасибо! Как я могу перейти к представлению тогда? – HUSTEN

+0

Отличный ответ. Спасибо!! – HUSTEN

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