2

CAS認証にcasrack-the-authenticatorgemを使用しています。私のサーバーはSinatra上でThinを実行しています。CAS認証ビットが機能するようになりましたが、CASログインを確認するために「/index.html」リクエストをインターセプトするようにRackに指示する方法がわかりません。ユーザーがページの表示を許可されていない場合は、HTTPを返します。実際のページを提供する代わりに403応答。誰かがこれを経験したことがありますか?ありがとう。

私のアプリ:

class Foo < Sinatra::Base
    enable :sessions
    set :public, "public"
    use CasrackTheAuthenticator::Simple, :cas_server => "https://my.cas_server.com"
    use CasrackTheAuthenticator::RequireCAS

    get '/' do
        puts "Hello World"
    end
end

私のラックアップファイル:

require 'foo'

use Rack::CommonLogger
use Rack::Lint

run Foo

Rackにファイルサービスの認証を理解させる最初の試み(コメントや考えを歓迎します):

builder = Rack::Builder.new do
    map '/foo/index.html' do
        run Proc.new { |env|
            user = Rack::Request.new(env).session[CasrackTheAuthenticator::USERNAME_PARAM]
            [401, { "Content-Type" => "text/html" }, "CAS Authentication Required"] unless user
            # Serve index.html because we detected user
         }
    end

    map '/foo' do
        run Foo
    end
end

run builder
4

1 に答える 1

2

Casrack-the-Authenticatorは、CAS情報をRackセッションに配置します。別のRackミドルウェアまたはSinatraアプリでそれを引き出すことができます。

以下はRailsアプリケーション用ですが、概念はSinatraまたはRackミドルウェアでも同様です。

# in app/controllers/application_controller.rb:
protected

def require_sign_in!
  render :nothing => true, :status => 403 unless signed_in?
end

def signed_in?
  current_user.present?
end

def current_user
  @current_user ||= Person.find_by_username(session[CasrackTheAuthenticator::USERNAME_PARAM])
end
于 2010-04-23T17:58:38.010 に答える