Meteor:绑定微博
微博使用Oauth2.0向第三方授权,具体信息参考oauth2和微博官方文档。
meteor的用户系统集成了第三方账号绑定功能。实际上,在meteor的用户系统中,用户通过账号关联的service进行认证(登录),service可以是weibo、twitter、google等第三方账户,也可以是password(也即,你可以构建一个不包含password service,纯基于第三方账户的用户体系)。至于你的meteor用户系统要集成哪些服务,可以通过安装accounts-<service>包自行决定。
如果使用accounts-password,你需要先创建用户,再使用username(或email)和password进行登录。但是,如果使用第三方账号,你不必创建账号,便可以直接loginWith<service>,系统会在获取你的授权(并向第三方授权服务器获取access token和相关用户信息)之后,根据第三方id查询是否有绑定的账号,如果有,则登录之,否则,创建并登录。
meteor并没有原生提供将已有账号和第三方账号进行绑定的设施(机制上是可行的)。如上所述,直接使用第三方账号登录,meteor会创建新账号。解决方法自行google,这里介绍我选择的一种方案——使用meteor-link-accounts包。
以下为具体操作细节:
meteor安装后就有用户系统。首先,需要支持password。安装accounts-password包即可。
然后,需要支持weibo。安装accounts-weibo包即可。
然后,需要向微博注册开发者账号,并申请应用,申请应用时选择<网页应用>。应用申请成功后,可以获取key和secret,并能设置redirect_url(授权回调页)。这里特别注意,开发阶段,建议将redirect_url设置为http://127.0.0.1:3000/_oauth/weibo,并在本机使用127.0.0.1:3000来打开应用。其中,host字段可以自行设置,但是本机必须进行适当配置,使得该host映射到本机ip,并且meteor应用使用该host作为base url,并且本机使用该host来打开应用。
根据meteor文档,使用第三方账号,需要进行适当配置。首先,安装service-configuration包,然后,在server端进行如下配置:
ServiceConfiguration.configurations.upsert(
{ service: "weibo" },
{
$set: {
clientId: <你的应用id>,
secret: <你的应用secret>,
loginStyle: "popup"
}
}
);
现在,你应经可以通过在前端调用Meteor.loginWithWeibo()进行微博登录了!
接下来,要增加将微博绑定到已有账号的能力。首先,安装bozhao:link-accounts包,然后,大功告成!你已经可以在客户端进行登录后调用Meteor.linkWithWeibo()进行微博绑定。绑定成功后,该用户的services属性下会增加weibo一项,具体内容包含:id,accessToken,screenName,expiresAt。
接下来,需要增加微博解绑功能,服务端调用Accounts.unlinkService(userId, serviceName)即可,当然,需要包装成一个method以供客户端调用。