2012-09-01 28 views
0

在使用railscast(http://railscasts.com/episodes/235-omniauth-part-1)後,我在我的rails3應用程序中使用了devise和omniauth。devise和omniauth未找到用戶名登錄

我可以登錄,並在數據庫中看到sign_in_count列正在增加。

但是,user_signed_in?總是返回false,並且current_user?返回no method error

我見過其他答案,說問題是由rails.js引起的,但我沒有使用rails.js。

我控制器

 
    def create 
     omniauth = request.env["omniauth.auth"] 

     authentication = Authentication.find_by_provider_and_uid(omniauth['provider'],omniauth['uid']) 
     if authentication 
      sign_in_and_redirect(:user, authentication.user) 

     elsif current_user 
      current_user.authentications.create!(:provider => omniauth['provider'], :uid => omniauth['uid']) 
      redirect_to root_url 
     else 
      user = User.new 
      user.apply_omniauth(omniauth) 
      if user.save(:validate => false) 
       sign_in(:user, user) 

       redirect_to root_url 
      else 
       flash[:notice] = "error creating account" 
       redirect_to root_url 
      end 
     end 


    end 
+0

在你的用戶模型中,你有一句話說'devise:omniauthable,...'?如果沒有,你需要一個用戶模型(或者如果你的模型被稱爲別人喜歡的人,那麼你實際上需要'person_signed_in?'和'current_person') – ronalchn

+0

@ronalchn當我添加omniauthable,我得到一個路由錯誤'沒有路由匹配/ auth/facebook'我認爲出路的方式是不包括omniauthable。 – pedalpete

+0

那麼,我沒有用omgnuthable設計,所以我不知道。但是我知道你需要在你的User模型中調用設計函數(即使你沒有使用其他模塊的參數)。 – ronalchn

回答

1

,我要在這裏走出去的肢體,並說,一兩歲的Railscast可能,嗯,有點過時。來自問題和評論的幾件事情。首先,你必須包括Devise的:omniauthable模塊,否則,它不起作用。是的,在此之後,你不會得到路線匹配/auth/facebook,因爲你必須告訴它它在哪裏。

首先我會告訴你寫在Devise Wiki關於設置這個。其次,我會稍微介紹一下,併爲您提供一篇關於使用Google OAuth with Devise的博客文章。最後,我會留下你與通用Devise Wiki的鏈接,以及關於如何用Devise做各種令人敬畏的事情的近50篇文章。這些由社區進行更新,並且通常經常更新以便它們包含最新的做事方式。

+0

我試着按照你的教程,但仍然有同樣的問題。我一直在追蹤越來越多的博客和'文檔',但被困在同一個地方。然後我發現如果我只打算使用omniauth登錄,我實際上不需要'設計'插件,所以我已經完全刪除了設計。不幸的是,current_user仍然無法工作,但我無法弄清楚原因。 – pedalpete

+0

如果您刪除了Devise,'current_user'將不起作用,因爲它是Devise輔助方法。 – janders223

相關問題