web-dev-qa-db-ja.com

モバイルアプリの認証に新しいDeviseを使用する

Devise/RailsアプリにiOSを使用してユーザー認証を実装しようとしています。私は主にDeviseの「 user 」であり、純粋なWebアプリに使用していたため、問題が発生しました。そのため、背後で何が起こっているかについてそれほど気にする必要はありませんでした。シーン。 APIベースのアプリの認証を構築する必要があるので、まったく別の世界です。

このトピックを扱っているウェブ上のすべてのシングルチュートリアルを読みましたが(token_authenticatableが非推奨になったため、ほとんどが古くなっています)、まだ問題があります。私が何をする必要があるかを理解する。

私はまた、元のGitHubの要点について読んでいます この問題 それでも彼らが何について話しているのか理解していません。

Deviseの「 user 」に過ぎなかった私のような人がいると確信しているので、背後で何が起こっているのかよくわかりません。シーン。

誰かがモバイルアプリにAPIベースの認証システムを実装するための簡潔なソリューションを提供できますか?それほど複雑にすることはできません。DeviseRails generateを実行するだけだったので、以前はとても素晴らしかったのですが、これは私にとって悪夢でした。

29
Vlad

私はあなたが望むのと同じことに取り組んでいます、

このためには、単純なDeviseではなくトークン認証を使用する必要があります。gemfileに次のgemを追加します

  # Use device for authentication
    gem 'devise'
    gem 'simple_token_authentication'

ドキュメントに従ってください simple_token_authentication

Use Api like this

curl -v https://example.com/users/sign_in -X POST -H "Accept: application/json" -H "Content-Type: application/json" -d '{"user": {"login": "7838712847" ,"password": "8489", "mobile_type": "ios", "mobile_key": "APA91bG6G4UvjeCWvb8mMAH1ZO3I-8FB3nkRPyCHnwZiXgd16HK18GgoV5n7gjJtZNs038iaFGutzdxnhes3WyaXEX52-xmOyvuEK8S1abBdpuhD9AD5bzLWeu-1Ow_yZRTVg3Nypz1z"}}'

I am using mobile number to login so customize gem according your need

それが機能していない場合は私に知らせてください(私にメールしてください:[email protected]

3
Mukesh

Railsアプリで認証にDeviseを使用する場合、これは私にとって優れたアプローチです。最初にトークンをテストする場合(iOS、Android、...でトークンを設定できます)。 app)を使用して、Webユーザーのデフォルトの認証方法にフォールバックします。

Rails

:api_token文字列列を追加して、ユーザーモデルに独自のトークンを追加し、ユーザーごとに一意の値を入力します。一部のユーザーデータ(ID +電子メールなど)のDigest :: SHA1を使用することは良い出発点ですが、一意のトークンを生成することに関しては、好きなだけ夢中になることができます(そしてそうすべきです)。

そのトークンに対する認証のメソッドを作成します。簡単にアクセスできるようにメインのApplicationControllerに追加できます(コントローラーのプライベートセクションにメソッドを配置することを忘れないでください)。

def authenticate_user_by_token
  @api_token = request.headers['HTTP_AUTHORIZATION']

  if @api_token.present? && @user = User.find_by_api_token(@api_token)
    sign_in @user
    return @user
  else
    return false
  end
end

次に、(プライベート)メソッドを作成し、このメソッドを、使用しているフィルターメソッドの前にデバイスにチェーンします(たとえば、:authenticate_user!など)。簡単にアクセスできるように、上記の方法と同じコントローラーに配置します。

def authenticate_by_token_or_devise!
  return authenticate_user! unless authenticate_user_by_token
end

次に、:authenticate_userからの現在のbefore_filter呼び出しを置き換えます。新しく作成されたものに; :authenticate_by_token_or_devise!、そのように;

before_filter :authenticate_by_token_or_devise!

または、Rails 4Rails 4:before_filter vs. before_action )から始めて、before_actionを使用します。

before_action :authenticate_by_token_or_devise!

iOS

これで、そのトークンをiOSアプリに追加するだけです。アプリで使用するフレームワークによっては、以下のコードとは異なる場合があります。

この例では、AFNetworking( https://github.com/AFNetworking/AFNetworking )を使用しています。これは、AFHTTPRequestOperationManagerでAuthorizationヘッダートークンを設定して、作成するすべてのリクエストに追加されるようにする方法です。

NSString *apiToken = @"your-token-here";
[[_manager requestSerializer] setValue:apiToken forHTTPHeaderField:@"Authorization"];

オプション

さらに、次のように、トークンベースの認証のみへのアクセスを許可するbeforeフィルターメソッドを作成できます(たとえば、トークンを使用してのみアクセスしたい/ apiルートのセットがある場合)。

def authenticate_user_by_token!
  if !authenticate_user_by_token
    render nothing: true, status: :unauthorized and return
  end
end
1
Stijnster

最近、Webアプリ(APIアクセス用)にトークンベースの認証を設定する必要がありました。また、Deviseから削除されたという事実にも遭遇しました。

Simple Token Authentication を使用しましたが、これは非常にうまく機能しました。

1
Munen

最近APIを実装したとき、ラックベースの認証ジェムである Warden を使用するという提案に惜しみなく従いました。私の感覚では、独自の認証を作成する必要のある認証の宝石が壊れていました。しかし、この宝石はちょうどいいレベルのコントロールを提供します。私の唯一の不満は、gemがPOSTパラメータをうまく処理しないことです。 私はそれを回避することができました 、しかしその種の懸念は(IMO)処理されるべきです宝石によって。

これを使用したことで、一般的でない認証を必要とするシナリオには、このgemを強くお勧めします。独自の認証戦略を展開することは、(a)非常に単純であり、(b)他の開発者の仮定に縛られないため、喜びです。

あなたが始めるのを助けるために、 これが私のconfig/initializers/warden.rbファイルです

0
MustModify

Devisegemとdoorkeepergemを組み合わせて使用​​すると、Web認証とモバイル認証をサポートできます。

たとえば、deviseを使用してユーザーを登録し、パスワードの忘れや電子メールの確認フローを処理しました。モバイルクライアントの場合、APIを保護するためのoauth2プロバイダーとしてドアキーパーgemを使用しました。ドアキーパーgemでサポートされているoauth2グラントフローはたくさんあります。それらをご覧になることをお勧めします。

ここに リンク !始めるには

0
Ronny