2013-06-22 2 views
1

새 사용자를 만들 때 Authlogic이 암호 매개 변수를 무시하는 것처럼 보입니다.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 

그리고 내 사용자 모델 : 나는 POST 요청을 보낼 때

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

가/API/V1/사용자/사용자 이름, 이메일과 비밀번호 매개 변수, authlogic가 있다고 여기 내 users_controller 클래스의 그렇지 않은 경우 암호를 공백으로 둘 수 없습니다. 레일에 의해 인쇄 뭐죠은 다음과 같습니다

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('som[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와 루비 2/레일을 사용하고 4

답변

3

이 발췌에서보세요 레일 로그에서 :

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

약간 잘못된 매개 변수를 보내는 것처럼 보입니다. Authlogic에서 인식하려면 password 매개 변수는 해시 매개 변수 해시에서 user 키 아래에 있어야합니다. 나는. 레일 로그에서 그 라인은 다음과 같이 (문자열의 끝에주의)해야합니다

{"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 

을, 당신은 조정할 수 있습니다 클라이언트 측에서 보낸 매개 변수 (예 : HTTP POST 요청을 보낼 때 password 대신 user[password] 매개 변수의 이름 사용).

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

관련 문제