首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并Omniauth-Twitter并为同一用户设计电子邮件登录

合并Omniauth-Twitter并为同一用户设计电子邮件登录
EN

Stack Overflow用户
提问于 2018-02-05 20:49:26
回答 1查看 68关注 0票数 0

我运行一个网站,在那里我创建用户帐户,并发布他们的帖子。现在我开始公开注册,我已经设计了电子邮件注册和Omniauth注册。它们各自工作得很好。

然而,现在我注意到,人们在Twitter上注册,尽管他们存在,正如我早些时候添加的。如何合并这些帐户?

场景:

作为管理员,我通过电子邮件创建了一个设计用户(用户名: joebutton,email:mywebsite+joebutton@gmail.com (这里有一个小gmail黑客,因为我没有乔的电子邮件,设计需要电子邮件))

2-作为管理员,我提交了用户joebutton的帖子

3-稍后,Joe Button通过Twitter注册,用户名为joe_button

4-现在有两个乔按钮joebutton (由管理员添加并有帖子)和通过Twitter注册的真正的joe_button

我如何合并这两个帐户,这样乔可以通过电子邮件或推特登录并访问他的帖子(编辑,删除)?

EN

回答 1

Stack Overflow用户

发布于 2018-02-06 01:28:13

使用此代码显示由实际用户创建的所有用户。对于每个别名,您都可以选择一个别名(由您创建的用户),并调用一个方法将它们合并。合并它们意味着将帖子从您的用户重新分配到新用户,并摧毁您的用户(只留下真正的用户创建的用户,以及您编写的帖子)。如果您对用户有更多的依赖关系,这是不够的。

小心处理:)。备份你的数据库。此代码中的错误可能会删除错误的用户。

UsersController

代码语言:javascript
复制
def aliases

  #Users created by real users (twitter omniauth)
  @users = User.where.not("email LIKE ?", "mywebsite%")      

  #Users created by you
  @possible_aliases = User.where("email LIKE ?", "mywebsite%") 

  render 'aliases'
end

def merge
  if params[:id] != params[:second_id]

    # User created by real user (twitter omniauth)
    @user = User.find_by(id: params[:id])
    if @user
      @user.merge_with params[:second_id] # Merge with user create by you
    end
  end
  head :ok
end

用户模型

代码语言:javascript
复制
def merge_with other_id

  # User created by you
  @other = User.find_by(id: other)
  if @other
    # Assign your posts to this user
    @other.posts.update_all(:user_id => self.id) 
    @other.destroy
  end
end

别名视图

代码语言:javascript
复制
<h4>Users</h4>
<table class="table table-hover table-condensed">
  <tr>
    <th>Name</th>
    <th>Email</th>
    <th>Merge with</th>
  </tr>
  <%= render partial: 'review_user', collection: @users, as: :user %>
</table>

review_user局部视图

代码语言:javascript
复制
<tr>
  <td><%= user.name %></td>
  <td><%= user.email %></td>
  <td><%= select_tag 'user_id', options_from_collection_for_select(@possible_aliases, "id", "name", 
  user.id), :class => "review_user", prompt: "Select alias",
  :'data-url' => url_for(:controller=>"users", :action=>"merge", :id => user.id)
  </td>
</tr>

Javascript

代码语言:javascript
复制
#This will merge and edit users as you select them. 
#You may want to use a button instead (safer)

$(document).on("change", ".review_user", function() {
  $el = $(this);
  other = $el.val()
  url = $el.data("url");

  $.post (url, { other_id: other }, function(alias) {});
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48631233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档