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

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

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

共收到 22 条回复

#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 中对微信单独写了一套注册登录的逻辑, 与其他的第三方登录完全不一样.

#8楼 @glz1992 嗯,打算这样

#9楼 @neverlandxy_naix 多谢,我研究一下

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

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

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

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

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

直接设置email为 openid@wechat.com 好了

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

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

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

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

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