2015-09-11 3 views
0

Я пытаюсь создать систему аутентификации для Phoenix на основе пакета Guardian. Почти все в порядке, за исключением того, когда я создаю новые пользователи (подписание), что пользователь вставляется дважды:Вставка дублированных данных

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

Спасибо Хосе. Я, хотя это может быть что-то очевидное (потому что я новичок). Поэтому я собираюсь потратить еще немного времени, пытаясь найти его и сообщить. –

+0

Извините. create_changeset ничего не делает ...: def create_changeset (model, params \\: empty) do model |> cast (params, ~ w (name email password)) end –

ответ

1

Проблема была в том, что я использовал в своем контроллере plug :action. Этот штепсель снова запускает действие контроллера, поэтому его дважды вставляют в базу данных. Избавьтесь от plug :action решает его.

+0

Спасибо! У меня была та же проблема, что и решение. –

Смежные вопросы