2012-06-22 2 views
0

Я новичок в Ruby on Rails, и я хочу создать систему omniauth-devise с facebook и twitter как способ входа в мое приложение. Прямо сейчас я в значительной степени в точке (я думаю) о том, чтобы ее запустить. Тем не менее, я получаю следующее сообщение об ошибке:Ruby on Rails - Omniauth Facebook или Twitter - AuthServicesController

Маршрутизации Ошибка

неинициализированной постоянной AuthServicesController

Попробуйте запустить реки маршруты для получения дополнительной информации о доступных маршрутах.

И я не могу продолжать работу с логгином.

Я проводил много исследований в сети, но я не могу найти никого с той же или подобной проблемой.

Кто-нибудь знает, что это такое? Я сразу потерялся.

Большое спасибо!

Кстати, весь код, я получил в Services_controller.rb является следующее:

Эта ссылка диск вам исходный код под красивые точки http://www.sourcepod.com/ubfirz26-7741

class ServicesController < ApplicationController 
    before_filter :authenticate_user!, :except => [:create] 

def index 
    # get all authentication services assigned to the current user 
    @services = current_user.services.all 
end 

def destroy 
    # remove an authentication service linked to the current user 
    @service = current_user.services.find(params[:id]) 
    @service.destroy 

    redirect_to services_path 
end 

def create 
    # get the service parameter from the Rails router 
    params[:service] ? service_route = params[:service] : service_route = 'no service (invalid callback)' 

    # get the full hash from omniauth 
    omniauth = request.env['omniauth.auth'] 

    # continue only if hash and parameter exist 
    if omniauth and params[:service] 

    # map the returned hashes to our variables first - the hashes differ for every service 
    # omniauth['extra']['raw_info'] o omniauth['extra']['raw_info'] . Aquest últim és el més modern 
    if service_route == 'facebook' 
     omniauth['extra']['raw_info']['email'] ? email = omniauth['extra']['raw_info']['email'] : email = '' 
     omniauth['extra']['raw_info']['name'] ? name = omniauth['extra']['raw_info']['name'] : name = '' 
     omniauth['extra']['raw_info']['id'] ? uid = omniauth['extra']['raw_info']['id'] : uid = '' 
     omniauth['provider'] ? provider = omniauth['provider'] : provider = '' 
    elsif service_route == 'github' 
     omniauth['user_info']['email'] ? email = omniauth['user_info']['email'] : email = '' 
     omniauth['user_info']['name'] ? name = omniauth['user_info']['name'] : name = '' 
     omniauth['extra']['raw_info']['id'] ? uid = omniauth['extra']['raw_info']['id'] : uid = '' 
     omniauth['provider'] ? provider = omniauth['provider'] : provider = '' 
    elsif service_route == 'twitter' 
     email = '' # Twitter API never returns the email address 
     #omniauth['user_info']['name'] ? name = omniauth['user_info']['name'] : name = '' 
     omniauth['info']['name'] ? name = omniauth['info']['name'] : name = '' 
     omniauth['uid'] ? uid = omniauth['uid'] : uid = '' 
     omniauth['provider'] ? provider = omniauth['provider'] : provider = '' 
    #elsif service_route == 'google' 
    # omniauth['user_info']['email'] ? email = omniauth['user_info']['email'] : email = '' 
    # omniauth['user_info']['name'] ? name = omniauth['user_info']['name'] : name = '' 
    # omniauth['uid'] ? uid = omniauth['uid'] : uid = '' 
    # omniauth['provider'] ? provider = omniauth['provider'] : provider = '' 
    else 

     # we have an unrecognized service, just output the hash that has been returned 
     render :text => omniauth.to_yaml 
     #render :text => uid.to_s + " - " + name + " - " + email + " - " + provider 
     return 
    end 

    # continue only if provider and uid exist 
    if uid != '' and provider != '' 
     # nobody can sign in twice, nobody can sign up while being signed in (this saves a lot of trouble) 
     if !user_signed_in? 
     # check if user has already signed in using this service provider and continue with sign in process if yes 
     auth = Service.find_by_provider_and_uid(provider, uid) 
     if auth 
      flash[:notice] = 'Signed in successfully via ' + provider.capitalize + '.' 
      sign_in_and_redirect(:user, auth.user) 
     else 
      # check if this user is already registered with this email address; get out if no email has been provided 
      if email != '' 
      # search for a user with this email address 
      existinguser = User.find_by_email(email) 
      if existinguser 
       # map this new login method via a service provider to an existing account if the email address is the same 
       existinguser.services.create(:provider => provider, :uid => uid, :uname => name, :uemail => email) 
       flash[:notice] = 'Sign in via ' + provider.capitalize + ' has been added to your account ' + existinguser.email + '. Signed in successfully!' 
       sign_in_and_redirect(:user, existinguser) 
      else 
       # let's create a new user: register this user and add this authentication method for this user 
       name = name[0, 39] if name.length > 39    # otherwise our user validation will hit us 

       # new user, set email, a random password and take the name from the authentication service 
       #user = User.new :email => email, :password => SecureRandom.hex(10), :fullname => name 
       user = User.new :email => email, :password => SecureRandom.hex(10), :name => name, :haslocalpw => false 
       # add this authentication service to our new user 
      # user.services.build(:provider => provider, :uid => uid, :uname => name, :uemail => email) 
       user.services.build(:provider => provider, :uid => uid, :uname => name, :uemail => email) 

       # do not send confirmation email, we directly save and confirm the new record 
       user.skip_confirmation! 
       user.save! 
       user.confirm! 

       # flash and sign in 
       flash[:myinfo] = 'Your account on CommunityGuides has been created via ' + provider.capitalize + '. In your profile you can change your personal information and add a local password.' 
       sign_in_and_redirect(:user, user) 
      end 
      else 
      flash[:error] = service_route.capitalize + ' can not be used to sign-up on CommunityGuides as no valid email address has been provided. Please use another authentication provider or use local sign-up. If you already have an account, please sign-in and add ' + service_route.capitalize + ' from your profile.' 
      redirect_to new_user_session_path 
      end 
     end 
     else 
     # the user is currently signed in 

     # check if this service is already linked to his/her account, if not, add it 
     auth = Service.find_by_provider_and_uid(provider, uid) 
     if !auth 
      current_user.services.create(:provider => provider, :uid => uid, :uname => name, :uemail => email) 
      flash[:notice] = 'Sign in via ' + provider.capitalize + ' has been added to your account.' 
      redirect_to services_path 
     else 
      flash[:notice] = service_route.capitalize + ' is already linked to your account.' 
      redirect_to services_path 
     end 
     end 
    else 
     flash[:error] = service_route.capitalize + ' returned invalid data for the user id.' 
     redirect_to new_user_session_path 
    end 
    else 
    flash[:error] = 'Error while authenticating via ' + service_route.capitalize + '.' 
    redirect_to new_user_session_path 
    end 
end 
end 
+0

Вы объявили AuthServicesController в любом месте? Если вы укажете какой-то код, вам будет полезно помочь вам :) – Nobita

+0

Выполнено. Извините, что не поддерживает хорошую информацию, такую ​​как исходный код. Хотя вам все может понадобиться исходный код в route.rb из-за ошибки ... – mkll

ответ

1

Ваш класс объявлен как:

class ServicesController < ApplicationController 

И вы получаете эту ошибку:

uninitialized constant AuthServicesController 

Обратите внимание на разницу между ServiceController и AuthServicesController, и я считаю, что вы нашли решение своей проблемы. Другими словами, я считаю, что вы должны объявить свой класс следующим:

class AuthServicesController < ApplicationController 
+0

Но я никогда не вводил «AuthServicesController», поскольку я слежу за одним из этих великолепных учебников, опубликованных в Интернете. Думаю, я это решил. Это вопрос маршрутов.rb, и теперь я могу пойти немного дальше. Сразу я пытаюсь решить эту ошибку: неопределенная локальная переменная или метод 'подтверждено_ат 'для # <Пользователь – mkll

+1

Я бы открыл еще один вопрос для этой ошибки и объяснил далее ... – Nobita

+0

Решенный. Большое спасибо! – mkll

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