2009-07-24 21 views
17

Tôi đang cố gắng viết một ứng dụng người dùng OAuth đơn giản trong Rails. Tôi đang sử dụng Authlogic để xử lý xác thực và plugin OAuth Authlogic để thực hiện điều oauth.Tạo người dùng ngầm định bằng plugin OAuth Authlogic và Authlogic

Plugin oauth cung cấp một số người trợ giúp để hiển thị nút đăng nhập: oauth_login_button và oauth_register_button. Cùng với các logistic Authlogic và yêu cầu của plugin lọc hai nút này bằng cách nào đó tạo ra phiên/người dùng.

Điều gì xảy ra tiếp theo là như sau: - nếu tôi sử dụng trình trợ giúp oauth_login_button, thì đối tượng phiên không thể lưu vì không có người dùng cục bộ nào. - nếu tôi sử dụng trình trợ giúp oauth_register_button, sau đó, trên bất kỳ thông tin đăng nhập nào sau lần đầu tiên, Rails phàn nàn rằng mã thông báo đã được thực hiện ... điều đó có nghĩa là nó không thể tạo bản sao thứ hai cho cùng một người dùng.

Vấn đề là: Tôi không muốn có BOTH nút Đăng ký và Đăng nhập trên trang web của mình.

Về phía người dùng, những gì tôi muốn đạt được là một nút duy nhất trên trang bắt đầu, cho biết thông tin quan trọng. như "Đăng nhập bằng Twitter", người dùng phải nhấp để tiếp tục đến các trang bên trong của trang web.

Ở phía máy chủ, tôi muốn tạo ngầm tài khoản người dùng cục bộ, nếu người dùng là khách truy cập lần đầu tiên vào trang web của tôi.

Bất kỳ gợi ý nào về cách thực hiện việc này?

Tất cả các mẫu trên Authlogic + OAuth tôi đã có thể tìm thấy dường như không quan tâm đến chỉ có một nút duy nhất để đăng nhập. :(

Trả lời

11

Có vẻ như tôi sẽ trả lời câu hỏi bản thân mình.

tôi sử dụng đoạn mã sau để tạo ra nút Đăng nhập (trong HAML):

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

và sau đó tôi chỉ cần tạo đối tượng session của người dùng trong tạo phương pháp của lớp UsersController, nếu người dùng đã tồn tại :

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 

Nếu người dùng là khách truy cập lần đầu tiên, thì đối tượng người dùng được lưu thành công trong LINE A. Và nếu không có mã thông báo oauth thì chúng tôi sẽ tìm nạp người dùng từ DB và nhật ký anh ấy/cô ấy.

+0

Chính xác những gì tôi vừa tìm kiếm. Cảm ơn –

+0

điều này rất hữu ích – Anurag

+0

Cảm ơn bạn rất nhiều :) –

Các vấn đề liên quan