2012-01-02 22 views
6

Tôi đang sử dụng omniauth độc quyền để cho phép đăng nhập vào trang web của mình bằng facebook/google/twitter.Nhận Tên/Họ/Email từ Twitter bằng OAuth

Tôi lưu trữ tên, họ và email. Tuy nhiên, khi tôi tăng hàm băm twitter auth từ oauth tôi chỉ nhận được biệt hiệu, tên, vị trí, hình ảnh, mô tả và url trong hàm băm auth.

Có phạm vi nào tôi có thể chuyển trong trình khởi tạo của mình để nhận email của người dùng và ngắt tên vào trường first_name, last_name không?

Trả lời

8

Twitter không đưa ra email người dùng, do đó bạn sẽ không thể nhận được rằng thông tin từ API Twitter. Thay vào đó, bạn phải yêu cầu người dùng nhập địa chỉ email của họ vào biểu mẫu đăng ký của bạn.

Theo như tách tên lên, bạn muốn làm điều đó một khi bạn có băm trở lại sử dụng cái gì đó như:

social_params ||= request.env["omniauth.auth"] 
fullname = social_params["user_info"]["name"].split(' ') 
first_name, last_name = fullname[0], fullname[1] 
puts "first name is #{first_name} and last name is #{last_name}" 

Chỉ cần ghi nhớ rằng last_name có thể nil nếu họ không có một không gian trong tên của họ hoặc họ đã không cung cấp cho một tên cuối cùng. Điều này cũng không xem xét thực tế là nhiều người có nhiều họ trong các nền văn hóa khác.

+0

Cảm ơn bạn nhiều. Tôi không hoàn toàn chắc chắn làm thế nào để xử lý yêu cầu cho địa chỉ email sau khi gọi lại - Tôi khá mới để đường ray và hiện tại chỉ có phiên tạo hành động xử lý này trong một swoop mà không có sự tương tác của người dùng. Có lẽ một câu hỏi khác cho SO. – Rapture

+0

Thật không may, Twitter buộc bạn phải sử dụng một bước bổ sung cho quá trình đăng ký của bạn bằng cách không đưa ra địa chỉ email. Bạn sẽ phải chuyển hướng người dùng đến biểu mẫu đăng ký yêu cầu họ cung cấp địa chỉ email của họ hoặc người khác sử dụng dịch vụ đăng ký khác như Facebook cung cấp địa chỉ email nếu bạn muốn nó liền mạch. – iwasrobbed

+0

Vâng - hiện tại tôi đang sử dụng Facebook và Google - có lẽ tôi sẽ kết thúc việc xóa Twitter do điều này. – Rapture

0

Nếu bạn có tích hợp với FB, Google và Twitter, bạn sẽ cần phải có một đầu tiên và cuối cùng trong DB của bạn (nếu giao diện người dùng của bạn yêu cầu nó> trường hợp của tôi). Đây là những gì tôi đã đưa ra như một số quốc gia có những người có hơn 2 tokens cho tên của họ ví dụ: (Marco De Franca Solis) hoặc (Marco, De Franca Solis)

// + TEST CASES 
var name1 = handleName("Marco De Franca Solis") 
var name2 = handleName("first,last wer wer") 
var name3 = handleName("aName") 
var name4 = handleName("") 
// - TEST CASES 

handleName = function(input) { 
    var n=input.indexOf(" "); 
    n += input.indexOf(","); 
    var result = {}; 
    if(n < 0){ 
     result.first = input 
     result.last = "" 
    } 
    else{ 
     arr = input.split(/[ ,]+/); 
     result.first = arr[0] 
     result.last = "" 
     if(arr.length > 1) 
     { 
      arr[0] = "" 
      result.last = arr.join(" "); 

     } 
    } 

    return result 
} 
0

OmniAuth được đem lại cho bạn tất cả các tên kết hợp trong một chuỗi. Tuy nhiên, một số người có nhiều hơn hai tên, chẳng hạn như "John Clark Smith". Bạn có thể chọn để điều trị những người trong ba cách khác nhau:

(1) first_name: "John", last_name: "Smith"

def first_name 
    if name.split.count > 1 
     name.split.first 
    else 
     name 
    end 
    end 

    def last_name 
    if name.split.count > 1 
     name.split.last 
    end 
    end 

(2) first_name: "John Clark", last_name: "Smith "

def first_name 
    if name.split.count > 1 
     name.split[0..-2].join(' ') 
    else 
     name 
    end 
    end 

    def last_name 
    if name.split.count > 1 
     name.split.last 
    end 
    end 

(3) first_name: "John", last_name: "Clark Smith"

def first_name 
    name.split.first 
    end 

    def last_name 
    if name.split.count > 1 
     name.split[1..-1].join(' ') 
    end 
    end 

những ví dụ trên cho rằng nếu tên chứa ít hơn 2 từ thì đó là tên đầu tiên. Câu hỏi này cũng tương tự như this one

0

để sử dụng php:

$names = explode(' ',$socialData->firstName); 
$socialData->firstName=array_shift($names); 
$socialData->lastName=implode(' ',$names); 

Hãy nhận biết tên có thể có nhiều tên họ và có thể nhiều firstnames, giao dịch này với nhiều tên họ nhưng không firstnames.

2

Sử dụng API Twitter hiện tại là có thể nhận email. Bạn phải điền vào một mẫu đơn yêu cầu sự cho phép đó.Quá trình này rất dễ dàng và nhanh chóng, nó được giải thích here.

Yêu cầu địa chỉ email của người dùng yêu cầu ứng dụng của bạn được Twitter đưa vào danh sách cho phép. Để yêu cầu quyền truy cập, vui lòng sử dụng biểu mẫu này.

Khi được đưa vào danh sách trắng, hộp kiểm “Yêu cầu địa chỉ email từ người dùng” sẽ khả dụng dưới quyền của ứng dụng trên apps.twitter.com. URL chính sách bảo mật và các trường URL điều khoản dịch vụ cũng sẽ có sẵn trong các cài đặt được yêu cầu để truy cập email. Nếu được bật, người dùng sẽ được thông báo qua hộp thoại oauth/authorize để ứng dụng của bạn có thể truy cập địa chỉ email của họ.

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