2009-07-24 16 views
17

Rails'de basit bir OAuth tüketici uygulaması yazmaya çalışıyorum. Kimlik doğrulama işlemi için Authlogic ve outh işleminin yapılması için Authlogic OAuth eklentisini kullanıyorum.Authlogic ve Authlogic OAuth eklentisi ile örtülü kullanıcı oluşturma

Oauth eklentisi, aşağıdaki düğmeyi imzalamak için birkaç yardımcı sağlar: oauth_login_button ve oauth_register_button. Authlogic mantıkları ve eklentinin isteği filtreleriyle birlikte bu iki düğme bir şekilde oturumu/kullanıcıyı oluşturur.

Bundan sonra ne olur: - oauth_login_button yardımcı programını kullanırsam, oturum nesnesi yerel olarak böyle bir kullanıcı olmadığı için kaydedilmez. - oauth_register_button yardımcısını kullanırsam, ilk girişten sonra herhangi bir girişte, Rails jetonun zaten alınmış olduğundan şikayet ediyor ... yani aynı kullanıcı için ikinci kopyasını oluşturamıyor, yani doğru.

Sorun şu ki: Sitemde BOTH Register AND Login butonlarına sahip olmak istemiyorum.

Kullanıcı tarafında, elde etmek istediğim, başlangıç ​​sayfasında tek bir düğme olduğunu belirten smth. Kullanıcının sitenin iç sayfalarına ilerlemek için tıklaması gereken "Twitter ile Giriş Yap" gibi.

Sunucu tarafında, kullanıcı sitem için ilk kez ziyaretçiyse, yerel kullanıcı hesabını dolaylı olarak oluşturmak istiyorum.

Bunu nasıl yapacağınıza dair ipuçları var mı? Authlogic + OAuth'un üzerinde

Tüm numuneler ben oturum açmak için yalnızca tek bir düğmeye sahip umurumda görünmemektedir bulabildim. :(Ben soruyu kendime cevaplamak için gidiyorum gibi

cevap

11

görünüyor. kullanıcı zaten varsa,

- form_tag({:controller => "users", :action => "create"}, {:method => "post"}) do 
    = oauth_register_button :value => "Sign In with Twitter" 

ve sonra ben sadece UsersController sınıfının oluşturmak yönteminde kullanıcının oturum nesnesi oluşturmak:

I (haml olarak) oturum Aç düğmesini oluşturmak için aşağıdaki kodu kullanabilirsiniz :

def create 
    @user = User.new(params[:user]) 
    @user.save do |result| # LINE A 
    if result 
     flash[:notice] = "Account registered!" 
     redirect_to some_inner_path 
    else 
     unless @user.oauth_token.nil? 
     @user = User.find_by_oauth_token(@user.oauth_token) 
     unless @user.nil? 
      UserSession.create(@user) 
      flash.now[:message] = "Welcome back!" 
      redirect_to some_inner_path   
     else 
      redirect_back_or_default root_path 
     end 
     else 
     redirect_back_or_default root_path 
     end 
    end 
    end 
end 

Kullanıcı daha sonra kullanıcı nesnesi başarıyla LINE A'da kaydedilir ilk kez ziyaretçi, Ve öyle değil ve kullanılabilir bir oauth belirteç varsa, o zaman DB ve günlüğünden kullanıcıyı alıp denerseniz

+0

Tam olarak ne arıyordum. Teşekkürler –

+0

Bu çok yararlı – Anurag

+0

Çok teşekkür ederim :) –

İlgili konular