2016-02-24 29 views
6

Tôi đã theo dõi bài đăng này http://dev.office.com/code-samples-detail/2142 và Ruby để nhận địa chỉ email của người dùng. Đây là mã:Không thể nhận email đã đăng nhập bằng Office 365 REST API

# Parses an ID token and returns the user's email 
 
def get_email_from_id_token(id_token) 
 

 
    # JWT is in three parts, separated by a '.' 
 
    token_parts = id_token.split('.') 
 
    # Token content is in the second part 
 
    encoded_token = token_parts[1] 
 

 
    # It's base64, but may not be padded 
 
    # Fix padding so Base64 module can decode 
 
    leftovers = token_parts[1].length.modulo(4) 
 
    if leftovers == 2 
 
    encoded_token += '==' 
 
    elsif leftovers == 3 
 
    encoded_token += '=' 
 
    end 
 

 
    # Base64 decode (urlsafe version) 
 
    decoded_token = Base64.urlsafe_decode64(encoded_token) 
 

 
    # Load into a JSON object 
 
    jwt = JSON.parse(decoded_token) 
 

 
    # Email is in the 'preferred_username' field 
 
    email = jwt['preferred_username'] 
 
end

Chức năng này làm việc rất tốt, tôi có thể nhận được địa chỉ email của người dùng. Nhưng hôm nay, chức năng này vẫn hoạt động mà không có lỗi nhưng JSON tôi đã không chứa địa chỉ email của người dùng nữa.
Ai đó có thể giúp tôi không? Tôi muốn nhận địa chỉ email của người dùng. Cảm ơn bạn !

Trả lời

10

Azure đã triển khai thay đổi đột phá đối với mô hình ứng dụng v2 và bạn không còn nhận thông tin người dùng theo mặc định nữa.

Bạn có thể đọc tất cả về nó ở đây: https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-preview-oidc-changes/, nhưng để tóm tắt:

  • Các openid phạm vi sử dụng để cung cấp cho bạn thông tin hồ sơ cơ bản cho người dùng.
  • Đó là không phù hợp với các tiêu chuẩn OpenID
  • Azure thay đổi yêu cầu mà bạn yêu cầu phạm vi profile để có được quyền truy cập vào thông tin mà

Đối với mẫu, tìm chút này:

# Scopes required by the app 
SCOPES = [ 'openid', 
      'https://outlook.office.com/mail.read' ] 

Và thay đổi nó thành:

# Scopes required by the app 
SCOPES = [ 'openid', 
      'profile', 
      'https://outlook.office.com/mail.read' ] 
+0

Cảm ơn bạn đã trả lời nhanh chóng. Tôi sẽ thử nó khi tôi đến công ty vào ngày mai. –

+0

Đã hoạt động. Cảm ơn bạn ! –

+0

Xin chào, chúng tôi đang sử dụng API để lấy các sự kiện lịch và sau đó là email được liên kết với sự kiện đã nói. Bây giờ chúng ta phải đăng ký một tài khoản trả tiền để có được điều này? –

2

Vui lòng thêm hồ sơ cá nhân và email trong phạm vi của bạn:

LĨNH VỰC = [ 'openid', 'hồ sơ', 'email', 'https://outlook.office.com/mail.read']

+0

Đã làm việc. Cảm ơn bạn ! –

+0

Nếu tôi không sử dụng mail.read Tôi không thể nhận được thông tin hồ sơ của người dùng, tôi không muốn yêu cầu quyền đọc thư – Diego

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