Filter for prompt handling

This commit is contained in:
augier 2015-10-11 18:24:15 +02:00 committed by theworldbright
parent 7b2be0d3c6
commit d351db1982
2 changed files with 25 additions and 1 deletions

View file

@ -6,7 +6,7 @@ module Api
render json: {error: e.message || :error, status: e.status}
end
before_action :authenticate_user!
before_action :auth_user_unless_prompt_none!
def new
auth = Api::OpenidConnect::Authorization.find_by_client_id_and_user(params[:client_id], current_user)
@ -201,6 +201,17 @@ module Api
redirect_fragment = redirect_params_hash.compact.map {|key, value| key.to_s + "=" + value }.join("&")
redirect_to params[:redirect_uri] + "?" + redirect_fragment
end
private
def auth_user_unless_prompt_none!
if params[:prompt] == "none" && !user_signed_in?
render json: {error: "login_required",
description: "User must be first logged in when `prompt` is `none`"}
else
authenticate_user!
end
end
end
end
end

View file

@ -95,6 +95,19 @@ describe Api::OpenidConnect::AuthorizationsController, type: :controller do
end
end
context "when prompt is none and user not signed in" do
before do
sign_out :user
end
it "should return an interaction required error" do
post :new, client_id: client.client_id, redirect_uri: "http://localhost:3000/",
response_type: "id_token", scope: "openid", state: 1234, display: "page", prompt: "none"
json_body = JSON.parse(response.body)
expect(json_body["error"]).to match("login_required")
end
end
context "when prompt is none and consent" do
it "should return an interaction required error" do
post :new, client_id: client.client_id, redirect_uri: "http://localhost:3000/",