插入重复数据
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
就解决了。
我正在尝试基于 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
就解决了。