2015-02-16 1 views
0

В настоящее время у меня есть токен доступа api с именем пользователя, паролем и grant_type в качестве пароля в моем запросе в rails с помощью привратника. Но мне нужно сделать client_id и секретным как обязательные поля в запросе. Как мне это сделать. Кто-нибудь может помочь сделать это.Сделать client_id и секретным обязательным для запроса доступа к токенам с grant_type = password в rails + doorkeeper

В моем конфигурационном файле doorkeeper.rb,

resource_owner_from_credentials do |routes| 
#client = OAuth2::Client.new(request.params[:client_id], request.params[:client_secret], site: "http://localhost:3000/") 
#auth_url = client.auth_code.authorize_url(:redirect_uri => "urn:ietf:wg:oauth:2.0:oob") 
request.params[:user] = {:email => request.params[:username], :password => request.params[:password]} 
request.env["devise.allow_params_authentication"] = true 
request.env["warden"].authenticate!(:scope => :user) 
end 

Я хочу, чтобы проверить подлинность с помощью учетных данных пользователя, а также хочу, чтобы сделать client_id и секретным обязательным для заполнения поля. Я хочу показать сообщение, если отсутствует идентификатор client_id и секрет.

+0

Вы можете разместить свою модель –

+0

Я добавил свой код конфигурации –

ответ

2

Внутри блока, вы можете проверить наличие params[:client_id] и params[:client_secret], и сделать необходимые проверки, чтобы убедиться, что они являются действительными :)

resource_owner_from_credentials do |routes| 

    raise Doorkeeper::Errors::DoorkeeperError if params[:client_id].blank? || params[:client_secret].blank? 
    dk_app = Doorkeeper::Application.find_by(uid: params[:client_id]) 
    raise Doorkeeper::Errors::DoorkeeperError if dk_app.blank? || dk_app.secret != params[:client_secret] 

    ## here do some checking that the client_id and secret are valid 

    request.params[:user] = {:email => request.params[:username], :password => request.params[:password]} 
    request.env["devise.allow_params_authentication"] = true 
    request.env["warden"].authenticate!(:scope => :user) 
end 

, если вам нужно изменить сообщение об ошибке в обычае один вы можете обратиться к this issue

+0

Благодарим вас за ответ. Но я не могу настроить сообщение об ошибке, пожалуйста, сообщите об этом также с недопустимой ошибкой client_id –

+0

Вы можете заменить '' '' Doorkeeper :: Errors :: DoorkeeperError''' '' 'Doorkeeper :: Errors :: MissingRequestStrategy''' – user980085

2

вы можете добавить этот код в ваш конфигурационный файл doorkeeper.rb,

# Doorkeeper patch: Always require a client on resource owner password flow 
Doorkeeper::OAuth::PasswordAccessTokenRequest.class_eval do 
    private 
    def validate_client 
    !!client 
    end 
end 

It MAK убедитесь, что клиентское приложение всегда требуется для потока паролей. Затем client_id и client_secret проверяются внутренне с помощью Doorkeeper. Если они недействительны, предоставляется сообщение об ошибке по умолчанию для Doorkeeper для этого случая.

Monkey patching всегда уродлив, но поскольку Doorkeeper на самом деле не позволяет настраивать это поведение, я думаю, что это действительное решение на данный момент.