0

リンクや写真の投稿など、Webサービスを利用したアプリを設計しています。最初のViewControllerは、ユーザーのデフォルトのユーザー名とパスワードをチェックし、それが正しい場合は、ユーザーがHome View Controllerにログインできるようにしますが、正しくない場合は、ユーザーをログインView Controllerに誘導します(初めての場合)。アプリケーションが実行されていることも、ユーザーをログインビューコントローラーに誘導します)。

ホームビューコントローラーに接続しているさまざまなビューコントローラーがあります。たとえば、1つはWebサイトに写真を投稿するためのものであり、もう1つはWebへのリンクを投稿するためのものであり、もう1つはユーザープロファイルの設定を変更するためのものです。

私はRestKitAPIを使用してWebに投稿しています。投稿に使用するコードは次のとおりです。

- (IBAction)addLinkPressed:(UIButton *)sender {

        [RKClient clientWithBaseURLString:@"http://MyWebsite.com"];

        NSDictionary* params = [NSDictionary dictionaryWithObjectsAndKeys:
                                self.linkField.text, @"url",
                                self.linkTitleField.text, @"title",
                                self.linkSummaryField.text, @"summary",
                                nil];

        RKRequest *request = [[RKClient sharedClient] post:@"/send_link.php" params:params delegate:self];
        [request setUserData:@"sendLink"];   
}

ビューコントローラごとにviewDidLoad、投稿の認証を取得するために次のメソッドを配置します。

- (void)autoLogin {

    [RKClient clientWithBaseURLString:@"http://MyWebsite.com"];    
    [RKObjectManager sharedManager].client=[RKClient sharedClient];
    RKParams *parameters = [RKParams params];

    [parameters setValue:[[NSUserDefaults standardUserDefaults] objectForKey:@"defaultUsername"] forParam:@"username"];
    [parameters setValue:[[NSUserDefaults standardUserDefaults] objectForKey:@"defaultPassword"] forParam:@"password"];

    [[RKClient sharedClient] setAuthenticationType:RKRequestAuthenticationTypeHTTP];

    RKRequest *request = [[RKClient sharedClient] post:@"/login.php" params:parameters delegate:self];
    [request setUserData:@"login"];
}

質問:各View Controllerにログインする以外に、Webサイトから投稿用の認証を取得する方法はありますか?各ViewControllerにログインする場合の問題は、ロギングプロセスでエラーが発生し、ユーザーがPOSTを実行できない場合があることです。ユーザーが正しいユーザー名とパスワードを入力するとすぐに、ユーザーが自分でログアウトするかアプリを削除するまでログインしたままになる方法が必要です。

私はこの相対的な質問を見つけましたが、それはそれほど役に立たなかったか、答えをよく理解していませんでした。任意の考えやアイデアをいただければ幸いです。

4

2 に答える 2

0

RestKitはAPIを使用するように設計されています。通常、APIはステートレスです。つまり、リクエスト間にステートなどはありません。従来のWebサイトでは、状態はクライアントとサーバー間でCookieをやり取りすることによって実現されます。どうやらRestKitはCookieを処理しないようです(これは私の意見では良いことです)。頭のてっぺんから、2つの解決策を考えることができます。

  • どうやらRestKitはCookieを自動的に処理しません。したがって、ログイン後にCookieを取得し、それ以降のすべてのリクエストに添付することができます。
  • より良い方法:基本的にユーザーがログイン時に受け取るトークンであるOAuth2を使用します。このトークンは、各リクエストにパラメーターとして追加されます。

どちらの方法も基本的に同じです。ユーザーがログインしていることを示すトークンを送信する必要があります。

于 2012-09-21T23:50:45.727 に答える
0

私があなたの状況をよく理解しているなら、あなたは別々にそして独立して行動する多くのビューコントローラーを持っています。そのためには、アプリが管理するビューコントローラーの数と同じ数のログインが必要です。

これがシナリオの場合は、ログイン作業を行う単一のクラスを作成し、GUIを処理するためだけに他のビューコントローラーを使用することができます。

これがあなたのアーキテクチャになります:

アプリの他のクラスとviewcontrollers->LOGINMANAGER->viewcontroller 1(写真)、viewcontroller 2(リンク)、viewcontroller 3(設定)、viewcontroller 4(何でも)...

于 2012-09-21T23:37:46.813 に答える