4

Rails 3 を使用しており、Web API の構築に成功しました。たくさんのコントローラーにログインが必要なので、Devise と token_authenticable を使うことにしました。それは機能していますが、期待していたほどではありません。リクエストごとにログイントークンを提供する必要がありましたが、1回だけ必要なようで、システムは通常のブラウザセッションと同じように応答でCookieを作成します。私は、各リクエストが機能するためにセッショントークンを送信する必要があるFacebookグラフAPIのようなものを実現したいと考えています。

Web APIを使用している場合はセッションCookieを送信せず、ブラウザを使用している場合はセッションCookieを送信するようにDeviseに指示するために設定できるフラグはありますか?

4

2 に答える 2

1

protect_from_forgery with: :null_sessionセッションが無視されるように使用 しました。

于 2016-02-10T00:25:26.640 に答える
1

私も同じ問題を抱えていました。

API の Sessions コントローラーに次の行がありました。

 warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")

ユーザーがログインしてセッションを作成していました(最初は気づきませんでした)

解決策は、これに似たものを使用することです(ブログ投稿にあります):

@user=User.find_by_email(email.downcase)
if @user.nil?
  render :status=>401, :json=>{:message=>"Invalid email or password."}
  return
end

# http://rdoc.info/github/plataformatec/devise/master/Devise/Models/TokenAuthenticatable
@user.ensure_authentication_token!

if not @user.valid_password?(password)
  logger.info("User #{email} failed signin, password \"#{password}\" is invalid")
  render :status=>401, :json=>{:message=>"Invalid email or password."}
else
  render :status=>200, :json=>{:token=>@user.authentication_token}
end

基本的にユーザーをログインさせるのではなく、トークンを取得します。ログアウトを除くアプリケーションの他の部分は正常に機能していました。

于 2013-04-19T16:47:09.083 に答える