借助OAuth,用户可以使用他们的LinkedIn帐户登录我的Rails应用程序。但是,我无法显示用户的个人资料图片。以下网址未加载图片:
<%= image_tag("http://api.linkedin.com/v1/people/{user-id}/picture-url") %>
如何让用户的LinkedIn个人资料图片显示在我的Rails应用程序中?
谢谢!
答案 0 :(得分:5)
尝试使用以下内容获取原始图片:
http://api.linkedin.com/v1/people/{user-id}/picture-urls::(original)
<强>更新强>
来自current docs(建议阅读):
使用当前用户(在用户登录后):
http://api.linkedin.com/v1/people/~:(picture-url)
使用member_id:
http://api.linkedin.com/v1/people/id=12345:(picture-url)
公开资料:
http://api.linkedin.com/v1/people/url=<public-profile-url>:(picture-url)
这些网址返回xml
,因此您可以解析xml
响应以获取picture-url
字符串,并将其用作image_tag
的参数。或者,您可以通过json
检索信息,传递额外的参数:
http://api.linkedin.com/v1/people/~:(picture-url)?format=json
在这两种情况下(xml
或json
),您需要从api响应中提取picture-url
以将其传递给image_tag
。
这个宝石omniauth-linkedin-oauth2
可能对你有帮助。
答案 1 :(得分:1)
这是我的解决方案:
def callback(self):
self.validate_oauth2callback()
oauth_session = self.service.get_auth_session(
data={'code': request.args['code'],
'grant_type': 'authorization_code',
'redirect_uri': self.get_callback_url()},
decoder=jsondecoder
)
me = oauth_session.get('people/~:(id,first-name,last-name,public-profile-url,email-address,picture-url,picture-urls::(original))?format=json&oauth2_access_token='+str(oauth_session.access_token), data={'x-li-format': 'json'}, bearer_auth=False).json()
social_id = 'linkedin$' + me['id']
name = me['firstName']
surname = me['lastName']
email = me['emailAddress']
url = me['publicProfileUrl']
image_small = me.get('pictureUrl', None)
image_large = me.get('pictureUrls', {}).get('values', [])[0]
return social_id, name, surname, email, url, image_small, image_large, me