Rails Devise 如何实现微信注册,而邮箱为可选项?

dailysunshine · 2015年09月16日 · 最后由 jimrokliu 回复于 2015年09月21日 · 6203 次阅读

大家好,最近在实现移动端微信用户直接通过微信服务号注册、登录我们的网站,之前 PC 端采用的是 Devise 用户注册系统。目前想将 Devise 的邮箱注册改为微信注册(通过微信 OAuth2.0 授权登录识别用户 ID),而邮箱为可选项。大家有没有什么建议?是不是需要摒弃 Devise,重写注册系统?

#1 楼 @chaixl 请问 omniauth-open-wechat-oauth2 怎么和 devise 整合在一起?

#3 楼 @chaixl 多谢,这上面有 facebook 的,我再研究一下 omniauth-wechat 跟 devise 的整合

这篇文章描述了如何将 devise email 换成 username http://alexvpopov.github.io/blog/2013/10/31/allow-users-to-authenticate-with-username-only-using-devise-activeadmin-rails-4-and-ruby-2/ ,或许可以按照这个方式把 email 换成 微信用户 ID

#5 楼 @dailysunshine 微信无法获取用户 id,只有 openid 或者 unionid

#6 楼 @michael0015 是的,打算用 openid

获取了 openid 然后自动创建一个 user 并登录?

如果要通过 直接通过微信服务号注册 而不是微信 Oauth2 的话,需要在 devise 中单独对微信写一套注册的逻辑, 其中的坑比较多,建议不使用 devise, 自己实现登录注册模块. http://account.fir.im/signin?sns=1, 这里的微信登录,就是在 devise 中对微信单独写了一套注册登录的逻辑,与其他的第三方登录完全不一样。

#9 楼 @neverlandxy_naix 体验了一下 fir.im , 不清楚为什么微信登陆后需要修改密码,这个密码在什么地方用到了吗(只看到邮箱登陆需要密码)?

#9 楼 @neverlandxy_naix 另外一个问题,通过扫描微信号二维码实现微信登陆(而非 Oauth), 那么已经关注公众号的用户如何在手机微信客户端直接登陆网站账户呢(貌似 fir.im 不需要这个功能)?

@dailysunshine 修改密码这个是个 bug, 工程师还没有改 😁 手机端要微信登录,那么靠关注服务号这种方式是行不通的,必须使用微信的 Oauth

@neverlandxy_naix 想请教一下,如果实现只用 openid 当账号,大概流程通过微信网页授权接口获取到用户 openid,第一次授权的话就自动生成一个 user 并且自动登录,之前授过权的话就自动登录。如果这需要这样的话,自己写一套注册登录会比较好吗?还有一点就是自己写的话,密码还需要吗?

@ztt 自己写比较好,很简单的,如果使用 devise, 很可能需要重写 RegistrationsController#create 方法 另外,密码需不需要的问题,是看你的业务需求了,业务需要密码的话,就加上密码。

直接设置 email 为 [email protected] 好了

#18 楼 @vkill 用户在哪儿登录这个邮箱?我开启了注册邮箱的邮件认证

@dailysunshine 为啥要微信用户邮箱登陆呢?你这个是伪需求啊。

微信授权获取 openid 后先判断库中是否有该 openid,有的话就直接登录,没有的话再用 openid 新建一个用户并自动登录。不知这样行不。

大概需要为微信用户创建一个帐户,帐户的登录标示可以用 open_id,这样从微信访问应该是可以验证。问题是,如果微信用户直接访问你的网站,要么集成微信的认证,要么你再让微信用户绑定一个手机号。通常一些 app 推广的时候,会通过发送优惠券的方式,获得手机号。这样,如果他们访问你的网站时候,也可以通过手机,短信方式登录。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号