SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Groovy+GrailsでRailsなWeb開発

GrailsのAuthenticationプラグインによる認証

Groovy+GrailsでRailsなWeb開発 第5回

コード内からログアウトする

 今度は、Authenticationに任せていた処理をプログラム内から実行させる方法についてです。ログイン、ログアウト、サインアップといった操作は、Authenticationに用意されている専用のタグを使ってフォームを作り、Authenticationのアクションに送って処理させていました。が、これらをプログラム内から処理させたい、という場合もあるでしょう。この方法についても触れておきましょう。

 まずは、ログアウト処理からです。ここではloginアクションに移動したとき、自動的にログアウトを行うようにしてみましょう。AuthControllerのloginクロージャを次のように修正します。

def login = {
    if (authenticationService.isLoggedIn(request)) {
        def user = session.authenticatedUser
        session.authenticatedUser = null
        authenticationService.logout(user)
    }
}

 これで、loginにアクセスすると自動的にログアウトします。ここでは、authenticationService.isLoggedInでログイン状態をチェックし、ログインしているときには次のような手順でログアウト処理を行っています。

def user = session.authenticatedUser

 まず、セッションのauthenticatedUserの値を変数に取り出します。authenticatedUserは、セッションに保管されているユーザーの値です。これはAuthenticatedUserというクラスのオブジェクトの形になっています。

session.authenticatedUser = null

 session.authenticatedUserの値をnullにし、セッションに保管されるAuthenticationUserオブジェクトを取り除きます。

authenticationService.logout(user)

 続いて、authenticationServiceのlogoutを呼び出します。これは、引数に指定したAuthenticationUserオブジェクトをもとにログアウトを試みます。ログアウトは、このように「session.authenticatedUserのnull化」と「authenticationService.logoutの呼び出し」を行うことで実行されます。

コード内からログインする

 続いて、ログイン処理についてです。今度はindexアクションを修正し、ログインせずにアクセスしたら、自動的に「guestuser」というユーザー名でログインするようにしてみましょう。これを行う前に、あらかじめ「guestuser」という名前のユーザーID(パスワードもguestuser)を登録しておいてください。

 AuthControllerのindexクロージャを次のように修正してください。これで作業は完了です。実際にindexにアクセスし、未ログイン状態だとguestuserで自動ログインされるのを確認してください。

def index = {
    if (!authenticationService.isLoggedIn(request)) {
        def loginResult = authenticationService.login('guestuser','guestuser')
        session.authenticatedUser = loginResult
    }
}
図11 ログインせずにアクセスすると、自動的にguestuserとしてログインする。
図11 ログインせずにアクセスすると、自動的にguestuserとしてログインする。

 ここでは、authenticationService.isLoggedInでログインされているかどうかをチェックし、ログインしていない場合には、まず「authenticationService.login」でログインを実行します。

def loginResult = authenticationService.login('guestuser','guestuser')

 このloginは、ログインするユーザーIDとパスワードを引数に渡して呼び出します。これを実行すると、authenticationServiceは指定された引数の値を使ってログインを試み、AuthenticationUserという認証ユーザーのインスタンスを返します。

session.authenticatedUser = loginResult

 返されたAuthenticationUserを、session.authenticatedUserに設定します。これでログイン処理は終了です。ログインも、ログアウトと同様に「authenticationService.loginの実行」「session.authenticatedUserへの設定」という作業で実行されます。

おわりに

 これで、サインアップ、ログイン、ログアウトといった基本操作、そしてログインされた状態やログインしているユーザー情報などの表示、といった認証に必要な基本的な機能についての説明を終わります。

 Authenticationは、とりあえずログインとログアウトさえ分かればすぐに使えるものです。データの保管や管理などを考えることなく、シンプルなフォームとカスタムタグさえ分かれば利用することができます。

 ログイン状態のチェックや細かな制御などはコントローラーにコードを置いて行うこともできますすが、まずは「ビュー側だけで実装する」やり方を理解しましょう。ビューの修正だけで認証の基本はすべて実現できます。コントローラー側の処理は、もう少しステップアップしたいと思うようになったら使ってみる、と考えておくとよいでしょう。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Groovy+GrailsでRailsなWeb開発連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4106 2009/07/22 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー