2015-09-11 101 views
0

我正在嘗試爲基於Guardian軟件包的Phoenix創建身份驗證系統。幾乎所有的東西,例外的是確定,當我創建一個新用戶(註冊)用戶插入兩次:插入重複數據

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

,我認爲這個問題必須在控制器,但我找不到任何奇怪:

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 

這裏有什麼問題?

+0

這是不可能知道只有該代碼段。另外,您應該爲數據庫中的電子郵件字段添加unique_constraint。你的'create_changeset'函數在做什麼? –

+0

謝謝José。我雖然可能是明顯的(因爲我是一個新人)。因此,我將花更多的時間來嘗試找到它並讓你知道。 –

+0

對不起。 create_changeset並沒有什麼特別的...:def create_changeset(model,params \\:empty)做 model |> cast(params,〜w(name email password)) end –

回答

1

問題是我在我的控制器中使用plug :action。該插件再次運行控制器操作,這就是爲什麼它在數據庫中插入兩次的原因。 擺脫plug :action解決了它。

+0

謝謝!我遇到了這個解決方案解決的相同問題。 –