插入重复数据

Inserting duplicated data

我正在尝试基于 Guardian 包为 Phoenix 制作一个身份验证系统。几乎一切正常,除了当我创建一个新用户(注册)时该用户被插入两次:

skeleton_dev=# Select * from users;
 id | name |   email   |                      encrypted_password                      | password |     inserted_at     |     updated_at      
----+------+-----------+--------------------------------------------------------------+----------+---------------------+---------------------
  1 | pj   | pj@pj.com | b$M2WNdw5mJkUzirwbReKT0ux1HgLFcouq.SEOWEz5dDswCWI4i/uoW |          | 2015-09-11 09:55:08 | 2015-09-11 09:55:08
  2 | pj   | pj@pj.com | b$zqHStaEXNwpVoyg8StYwT.U3BEOyZDq1tsTIA.cjzlZYsuwzL4e7u |          | 2015-09-11 09:55:09 | 2015-09-11 09:55:09
(2 rows)

我觉得应该是controller的问题,但是我没发现什么奇怪的:

  def new(conn, _params) do
    changeset = User.create_changeset(%User{})
    render(conn, "new.html", changeset: changeset)
  end

  def create(conn, %{"user" => user_params}) do
    changeset = User.create_changeset(%User{}, user_params)

    if changeset.valid? do
      user = Repo.insert(changeset)

      conn
      |> put_flash(:info, "User created successfully.")
      |> Guardian.Plug.sign_in(user, :token, perms: %{ default: Guardian.Permissions.max })     #------ Autenticação ----------
      |> redirect(to: user_path(conn, :index))                                                  #------ Autenticação -------------
    else
      render(conn, "new.html", changeset: changeset)
    end
  end

这可能是什么问题?

问题是我在我的控制器中使用了 plug :action。该插件再次运行控制器操作,这就是它在数据库中被插入两次的原因。 去掉 plug :action 就解决了。