query: tag:auth

Railsにおけるrestful_authenticationやMerbのビルトイン認証機構に比べると、Sinatraには「とりあえずこれを使っておけ」というような認証ライブラリが無いような気がします。強いて言えばRack::Auth::Basicかな。ちょっと機能不足のように感じます。
という事で、Sinatraで使える認証用ライブラリをリストアップ。

その他、関連する面白そうなもの。

posted by genki genki on Sat 10 Oct 2009 at 17:58 with 0 comments

merb-auth-slice-passwordは、merb-gen appがデフォルトで生成する認証機能ですが、これを使ってログインが必要なアクションを作ると、デフォルトのrequest specでエラーが出るようになります。

そのような場合には、spec_helper.rbの中で、
以下のようなヘルパーを用意すると良いようです。

ruby>>
Merb::Test.add_helpers do
def create_default_user
unless User.first(:login => "krusty")
User.create( :login => "krusty",
:password => "klown",
:password_confirmation => "klown") or raise "can't create user"
end
end

def login
create_default_user
request("/login", {
:method => "PUT",
:params => {
:login => "krusty",
:password => "klown"
}
})
end
end
<<--

See Also

posted by genki genki on Wed 14 Jan 2009 at 11:04 with 0 comments

merb-auth-slice-activation
は、merbでemailアクティベーションを簡単に実装するための非常に便利なSliceです。
このSliceは、merb-auth-coreが提供するhookである、after_authenticationをフックする事によって、アクティベーションが済んでいないアカウントでのログインをブロックする仕様になっています。該当するコードは以下の通り。

merb-auth-slice-activation/lib/merb-auth-slice-activation.rb

ruby>>
# Initialization hook - runs before AfterAppLoads BootLoader
def self.init
# Actually check if the user is active
::Merb::Authentication.after_authentication do |user, *rest|
if user.respond_to?(:active?)
user.active? ? user : nil
else
user
end
end
end
<<--

ただ、この実装では、ログインに失敗した場合に何のエラーメッセージも表示されないため、以下のようにExceptionsコントローラにコードを加え、エラーメッセージを表示するようにしてみます。

ruby>>
class Exceptions < Merb::Controller
(snip)
def unauthenticated
request.exceptions.each do |e|
session.authentication.errors.add(:general, e.message)
end if request.exceptions
render :format => :html
end
end
<<--

Merbでは、アクションの実行中に例外が発生した場合、Exceptionsコントローラに処理が回ってきます。その場合、発生した例外オブジェクトは、request.exceptionsで参照出来ます。

あとは、view側で

rails>>
<%= error_messages_for session.authentication %>
<<--

を記述すればOK.

posted by genki genki on Thu 1 Jan 2009 at 21:22 with 0 comments

merbが生成するデフォルトのアプリケーションのひな形には、最初からユーザ認証の仕組みを提供するmerb-auth-slice-passwordというSliceが組み込まれています。

これが提供するデフォルトのログイン画面を変更するためには、
app/views/exceptions/unauthenticated.html.erbファイルを作ればOKです。

posted by genki genki on Wed 31 Dec 2008 at 09:55 with 0 comments