Lingr APIで何か作る日記

Lingr APIを使って何か面白いものが作れないかと試行錯誤する日記です。

2007-02-15

Lingr APIログインする  Lingr APIでログインする - Lingr APIで何か作る日記 を含むブックマーク はてなブックマーク -  Lingr APIでログインする - Lingr APIで何か作る日記  Lingr APIでログインする - Lingr APIで何か作る日記 のブックマークコメント

今日RailsからLingr APIを使ってみます。今日ログインに挑戦します。

Lingrへは、メールアドレスパスワードを使ってログインします。ログインすると、いま発行されているセッションユーザ情報が結び付けられます。API経由の場合、auth.loginを呼び出します。

これを、Railsからも使えるようにします。まずは、ユーザを表すUserモデルを新しく作ります。

$ script/generate model User session_id:integer email:string
class User < ActiveRecord::Base
  belongs_to :session
  validates_presence_of :email
end

Userモデル属性は、Sessionを参照するためのsession_idと、ユーザを識別するためのメールアドレスです。間違ってもパスワードは保存しません。

次に、Sessionモデルを修正して、loginメソッドを追加します。loginメソッドは、メールアドレスパスワードを受け取って、API Clientを使ってログインします。ログインに成功すると、先ほど作ったUserモデルユーザを追加します。すでにユーザ存在する場合は、データベースからUserモデルを取得します。

  def login(email, password)
    api = Lingr::ApiClient.new(nil)
    api.session = name
    response = api.login(email, password)
    unless response[:succeeded]
      p response
      p response[:response]
      error = response[:response]['error']
      message = "#{error['message']} (#{error['code']})"
      raise StandardError.new(message)
    end
    self.user = User.find_or_create_by_email(email)
  end

使い方はこんな感じ。簡単です。

$ script/console
Loading development environment.
>> session = Session.create
>> session.login('メールアドレス', 'パスワード')
>> session.user.email
=> "example@gmail.com"
>> session.logout
>> session.user
=> nil

ログアウト処理も追加しました。

  def logout
    api = Lingr::ApiClient.new(nil)
    api.session = name
    response = api.logout
    unless response[:succeeded]
      error = response[:response]['error']
      message = "#{error['message']} (#{error['code']})"
      raise StandardError.new(message)
    end
    self.user = nil
  end