前島様

ご返信わざわざありがとうございます。

動作はする形までになりましたが、納得はまだできてません。

手順はこれです

1.新しいdeviseだとtoken_authが利用できなくなるようでしたので、
Devise2.2.4 に入れなおしました。

この作業で
WARNING: Can't verify CSRF token authenticity
みたいな警告は消えました。

2.「
You have to confirm your account before continuing.」 
のエラー原因は
deviseの設定でconfirmableの設定をしており、
かつメールアドレスのverificationを行っている時に出ているようでした。

deviseの設定でconfirmableの設定はしておりました。
app/models/user.rbの設定です。
---
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :token_authenticatable, :confirmable
--

メールアドレスのverificationのチェックはこのように書いてませんでした。

validates :email, :presence => true, :email => true

3. 無理やり認証終了

User.find_by_email("登録時のEmailアドレス").confirm!

にてrails cコンソールで行いました。


これでログインは出来るようになりました。

しかし、eメールに最終認証終了のが届かなかったような気がしますので、
これが納得行かない点です。






2014年1月12日 22:09 前島真一 <netwillnet@gmail.com>:
前島です。

ざっとドキュメント見た感じ次のような感じかなあと思いました。参考になれば。

* sign_in メソッドは warden の set_user メソッドを呼び出している
* set_user メソッドの中でなにか起こっている?(しっかり調べたわけではないので推測)
* sign_in user, bypass: true とかすると set_user メソッド呼び出さずに直接 session をいじってログイン状態にする



2014年1月2日 23:33 杉田臣輔 <shinriyo@gmail.com>:

皆様

こんにちは、杉田といいます

「RailsとiPhoneではじめるアプリケーション開発」という書籍にて
iOSとRailsの連携を行っています。

質問ですが、
Deviseには、sign_in()というヘルパーメソッドがありますが、

app/controllers/api/sessions_controller.rb内にて、
resource = User.find_for_database_authentication(:email => params[:user][:email])
でクライアントから受け取ったresourceを、
if resource.valid_password?(params[:user][:password])
の判定後に、

sign_in("user", resource)

を行ったところ、それ以降の処理がうまく実行されていないようです。
sign_in(:user, resource)とuserをシンボルにしても同様の結果でした。

その際には、rails sでのコンソールには、
===
Completed 401 Unauthorized in 122ms (Views: 1.1ms | ActiveRecord: 4.5ms)
===
が表示されます。

ソースコード自体はこのサンプルをベースに行っています。

Deviseのバージョンは2.2、3.0、3.1を試しましたが同様でした。
現在は2.2.8を使用しています。


何卒、よろしくお願いします。



--
前島 真一(@netwillnet)
http://willnet.in/