2013-06-22 3 views
1

Authlogic, похоже, игнорирует параметр пароля при создании нового пользователя. Вот мой users_controller класс:Authlogic игнорирует параметр пароля

class Api::V1::UsersController < ApplicationController 

    def create 
    @user = User.new(user_params) 

    respond_to do |format| 
     if @user.save 
     format.json { render :json => @user, :status => :created} 
     else 
     format.json { render :json => @user.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    private 
    def user_params 
    params.require(:user).permit(:username, :email, :password) 
    end 

end 

И моя модель пользователя:

class User < ActiveRecord::Base 
    acts_as_authentic do |c| 
     c.require_password_confirmation = false 
    end 
end 

Когда я посылаю запрос POST к/API/v1/пользователей/с именем пользователя, адрес электронной почты и пароль параметра, authlogic говорит, что пароль не может быть пустым, даже если это не так. Вот, Что распечатывается рельсам:

Started POST "/api/v1/users/" for 127.0.0.1 at 2013-06-22 00:03:30 -0400 
Processing by Api::V1::UsersController#create as */* 
    Parameters: {"email"=>"[email protected]", "password"=>"[FILTERED]", "username"=>"myUser", "user"=>{"username"=>"myUser", "email"=>"[email protected]"}} 
    (0.2ms) BEGIN 
    User Exists (0.4ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('[email protected]') LIMIT 1 
    User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."username") = LOWER('myUser') LIMIT 1 
    User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE "users"."persistence_token" = '7b72bab3627914d33e83e4efe1c5a9dab190750efb227698c8b5b6be7a7ccf118160d8e12623078543e0f4e5f31eb30828799cb0d97fb2af195daee894c79902' LIMIT 1 
    (0.2ms) ROLLBACK 
Completed 422 Unprocessable Entity in 33ms (Views: 0.2ms | ActiveRecord: 3.2ms) 

я использую последнюю authlogic и Ruby, 2/Rails 4.

ответ

3

Посмотрите на выписку от журнала Rails:

{"email"=>"[email protected]", "password"=>"[FILTERED]", "username"=>"myUser", "user"=>{"username"=>"myUser", "email"=>"[email protected]"}} 

Похоже, вы отправляете несколько неправильных параметров. Чтобы распознать Authlogic, параметр password должен находиться под user ключом в хэш-параметрах. То есть что строка из журнала Rails должен выглядеть следующим образом (обратите внимание на конец строки):

{"email"=>"[email protected]", "password"=>"[FILTERED]", "username"=>"myUser", "user"=>{"username"=>"myUser", "email"=>"[email protected]", "password" => "[FILTERED]"}} 

Чтобы исправить это, вы можете сделать хак вроде этого:

private 
def user_params 
    params.require(:user).permit(:username, :email).merge(:password => :password) 
end 

В качестве альтернативы, вы можете настроить параметры, отправленные с клиентской стороны (например, используя имя параметра user[password] вместо password при отправке запроса HTTP POST).

0

попробовать это: -

acts_as_authentic do |config| 
    config.check_passwords_against_database = false 
    config.validate_password_field = false 
    config.crypted_password_field = false 
end 
+0

Это позволяет создавать пользователя, но делает это без пароля. Мне нужны мои пользователи, чтобы иметь пароль. – edc1591