をトークンする必要があり、あなたがこれを行うことができます多くの方法があります。
# config/initializers/devise.rb
config.warden do |manager|
manager.failure_app = CustomFailure
end
# config/initializers/custom_failure.rb
class CustomFailure < Devise::FailureApp
def respond
unless request.format.to_sym == :html
http_auth
else
super
end
end
end
それ以外の場合はちょうどかどうかに関係なく、ログインのリダイレクト応答コードでHTMLを返し考案:私が考案は、私が解釈可能性があり、私のiphoneアプリ(例えば401)にエラーを返すように取得するためにやったことはカスタム障害アプリを作成しました情報が正しいか正しくない。
私のアプリは、私のレールのバックエンドに対して認証するユーザーを必要とするので、私はこのような単純なログインシステムを実装:
#app/controllers/pages_controller.rb
before_filter :authenticate_user!, :only => [:login]
ssl_required :login # you have to set up ssl and ssl_requirement
def login
@user = current_user
respond_to do |format|
format.html {render :text => "#{@user.id}"}
format.xml {render :text => "#{@user.id}" }
end
end
#config/routes.rb
match '/login', :to => 'pages#login'
その後iphoneアプリであなたはこのように/ログインにGETリクエストを送信することにより検証することができます(それは素晴らしいですので、私はASIHTTPRequestを使用):あなたがアプリにデータをポストする必要があるとき
- (void) validate_login:(NSString*)name :(NSString*)pwd
{
NSURL *login_url = [NSURL URLWithString:@"https://mysite.com/login"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:login_url];
[request setDelegate:self];
[request setUsername:name];
[request setPassword:pwd];
[request addRequestHeader:@"Accept" value:@"application/xml"];
[request startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
if ([request responseStatusCode] != 200) {
[self requestFailed:request];
}
else {
// authentication successful, store credentials
NSUSerDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:[request username] forKey:@"username"];
[defaults setValue:[request password] forKey:@"password"];
}
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSLog(@"failed with error: %d %@", [request responseStatusCode], [error localizedDescription]);
// tell user incorrect username/password
}
その後、あなたはユーザデフォルトからユーザ名とパスワードを取得し、要求にそれらを添付することができます。より安全にする必要がある場合は、キーチェーンに保存することができます。
私はこれを行うためのより良い方法があると確信していますが、うまくいけば、これはあなたにAPI認証戦略を考えさせることができます。
ちょっとジョニー、私は基本的なHTTP認証を有効にし、これを実装しようとし、http:// localhost:3000/login?user [email] = [email protected]&user [password] =パスワードにアクセスしようとするたびに、 "{"エラー ":続行する前にサインインまたはサインアップする必要があります。"} "あなたの考えは? – BeachRunnerFred