2012-05-09 3 views
1

私は、以下のruby openIdの例をUbuntu画像のsinatraで実行しています。ruby​​ sinatra openid appは "Nonceが既に使用されているか、範囲外です"と返信します

:GoogleのURL(https://www.google.com/accounts/o8/id) に入るとき、私は、Googleマイ資格情報を入力しますが、代わりに私が手にアクセス権が付与されているためにredirctedい

%w(rubygems sinatra openid openid/store/filesystem).each { |lib| require lib} 

REALM = 'http://localhost:4567' 
RETURN_TO = "#{REALM}/complete" 

get '/loginform' do 
    erb :loginform 
end 


post '/login' do 
    checkid_request = openid_consumer.begin(params[:openid_identifier]) 
    redirect checkid_request.redirect_url(REALM, RETURN_TO) if checkid_request.send_redirect?(REALM, RETURN_TO) 
    checkid_request.html_markup(REALM, RETURN_TO) 
end 

get '/complete' do 
    response = openid_consumer.complete(params, RETURN_TO) 
    return 'You are logged in!' if response.status == OpenID::Consumer::SUCCESS 
    msg=response.message 
    <<-eos 
    Could not log on with your OpenID due to #{msg} 
    eos 
end 

def openid_consumer 
    @consumer = OpenID::Consumer.new(session, OpenID::Store::Filesystem.new("#{File.dirname(__FILE__)}/.tmp/openid")) if @consumer.nil? 
    return @consumer 
end 


enable :inline_templates 

__END__ 

@@ layout 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> 
    <title>got openid?</title> 
</head> 
<body> 
    <%= yield %> 
</body> 
</html> 


@@ loginform 
<form method="post" accept-charset="UTF-8" action='/login'> 
    Identifier: 
    <input type="text" class="openid" name="openid_identifier" /> 
    <input type="submit" value="Verify" /> 
</form> 

すでにまたは範囲外の使用ナンス: "2012-05-09T13:50:xxxxxxxxxxxxxxx"

(ところで、私は "ルビー" ではない "ショットガン" を使用してRubyのプログラムを実行しています)。 誰かが出力の意味だけでなく救済についていくつかの洞察を私に提供することができますか? ありがとう!

答えて

1

解決済み! 問題はStore privligesに由来しています。 これは主にUbuntuの問題だと思います。

私はこの変更:この中へ

@consumer = OpenID::Consumer.new(session, OpenID::Store::Filesystem.new("#{File.dirname(__FILE__)}/.tmp/openid")) if @consumer.nil? 

(ステートレス):

@consumer = OpenID::Consumer.new(session, nil) if @consumer.nil? 

をし、それが働きました!

関連する問題