--- !ruby/object:RI::MethodDescription 
aliases: []

block_params: 
comment: 
- !ruby/struct:SM::Flow::P 
  body: This is the final portion of authentication. Unless any errors outside of specification occur, a 303 redirect will be returned with Location determined by the OpenID response type. If none of the response type :login_* urls are set, the redirect will be set to <tt>session[:openid][:site_return]</tt>. If <tt>session[:openid][:site_return]</tt> is unset, the realm will be used.
- !ruby/struct:SM::Flow::P 
  body: Any messages from OpenID's response are appended to the 303 response body.
- !ruby/struct:SM::Flow::P 
  body: Data gathered from extensions are stored in session[:openid] with the extension's namespace uri as the key.
- !ruby/object:SM::Flow::LIST 
  contents: 
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: <tt>env['rack.auth.openid.response']</tt> is the openid response.
  type: :BULLET
- !ruby/struct:SM::Flow::P 
  body: "The four valid possible outcomes are:"
- !ruby/object:SM::Flow::LIST 
  contents: 
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: "failure: <tt>options[:login_fail]</tt> or <tt>session[:site_return]</tt> or the realm"
  - !ruby/object:SM::Flow::LIST 
    contents: 
    - !ruby/struct:SM::Flow::LI 
      label: "*"
      body: <tt>session[:openid]</tt> is cleared and any messages are send to rack.errors
    - !ruby/struct:SM::Flow::LI 
      label: "*"
      body: <tt>session[:openid]['authenticated']</tt> is <tt>false</tt>
    type: :BULLET
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: "success: <tt>options[:login_good]</tt> or <tt>session[:site_return]</tt> or the realm"
  - !ruby/object:SM::Flow::LIST 
    contents: 
    - !ruby/struct:SM::Flow::LI 
      label: "*"
      body: <tt>session[:openid]</tt> is cleared
    - !ruby/struct:SM::Flow::LI 
      label: "*"
      body: <tt>session[:openid]['authenticated']</tt> is <tt>true</tt>
    - !ruby/struct:SM::Flow::LI 
      label: "*"
      body: <tt>session[:openid]['identity']</tt> is the actual identifier
    - !ruby/struct:SM::Flow::LI 
      label: "*"
      body: <tt>session[:openid]['identifier']</tt> is the pretty identifier
    type: :BULLET
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: "cancel: <tt>options[:login_good]</tt> or <tt>session[:site_return]</tt> or the realm"
  - !ruby/object:SM::Flow::LIST 
    contents: 
    - !ruby/struct:SM::Flow::LI 
      label: "*"
      body: <tt>session[:openid]</tt> is cleared
    - !ruby/struct:SM::Flow::LI 
      label: "*"
      body: <tt>session[:openid]['authenticated']</tt> is <tt>false</tt>
    type: :BULLET
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: "setup_needed: resubmits the authentication request. A flag is set for non-immediate handling."
  - !ruby/object:SM::Flow::LIST 
    contents: 
    - !ruby/struct:SM::Flow::LI 
      label: "*"
      body: <tt>session[:openid][:setup_needed]</tt> is set to <tt>true</tt>, which will prevent immediate style openid authentication.
    type: :BULLET
  type: :BULLET
full_name: Rack::Auth::OpenID#finish
is_singleton: false
name: finish
params: (consumer, session, req)
visibility: public
