2016-06-15 8 views
0

私はLoginActivityテンプレートを使用しています。標準のhttpリクエストを使用してメールとパスワードでウェブサイトにログインしようとしています。サイトはAPIを提供していないので、サイトのログインをミラーリングして、ページのメールボックスとパスワードボックスを埋めるようにしてから、ログインリクエストを送信すると考えています。Androidのログイン標準のhttpリクエストを使用してアクティブ

たとえば、電子メールとパスワードTextViewの入力を受け取り、ブラウザでどのように起こるかを正確に示す認証要求を標準のHTTP要求を認証サーバに送信することによって、stackoverflowにログインすると考えてくださいアドレス)。

私はこれまでにこのようなことをしていないし、それが可能かどうかもわからないので、私のところでは何の無知を許してください。

答えて

0

標準のhttpリクエストであなたのアプリからStackOverflowのようなサイトにログインする必要があると仮定します。それは単に不可能です。組織では、サードパーティのサイトやアプリケーションでユーザーの資格情報を処理することを許可しないためです。彼らのリソースを第三者と共有しようとしている場合、ほとんどの組織は以下の手順に従います。

  • まず、あなたが使うAPIを提供します。
  • このAPIを使用すると、ログインするユーザーを作成することができます。つまり、その資格情報を処理できません。
  • 次に、ユーザーに対応するトークンを与えます。
  • そのトークンを使用して、後続の要求を実行できます。

組織がapiを提供していない場合は、サードパーティのサイトやアプリケーションがユーザーのリソースにアクセスできない可能性が最も高いと考えられます。

+0

問題の会社は、14人の従業員を抱える小規模なスタートアップであり、非常にセキュリティが不足しています。私は、ページソースにログインした後、ユーザーIDとパスワードのハッシュを見ることができます。 –

1

これは、AndroidでWebブラウザと同様に行われます。

{ 
    username: 'myUsername' 
    password: 'mypass' 
} 

これが処理されますと、あなたの資格情報が正しい場合、あなたが取得します:つまり、あなたはのは、説明のためにJSONオブジェクトのようなものが含まれているとしましょう、適切なパラメータを持つPOSTリクエストを送信しますさまざまなデータが含まれている可能性がある応答のうち、accessToken(これはわずかなバリエーションと呼ばれることがあります)です。

このアクセストークンを覚えておいて、それを使ってサイトから他のデータをフェッチします。そのトークンはそこからあなたを認証するために使用されるためです。私は個人的に作成したAPIを持っており、登録されていないユーザーが利用できないリソースの要求ごとにパラメータとしてaccessTokenを送信します。

技術的な面では、httpリクエストを送信するためにOkHttpという便利なライブラリを使用しています。これは非常にやりがいのある使いやすいものです。ここで私が話しているかを確認するためのコードスニペットです:

//JSON is a media type for parsing json 
//json is a json string containing payload e.g. username and pass like in the example 
OkHttpClient httpClient = new OkHttpClient(); 
RequestBody body = RequestBody.create(JSON, json); 
    Request request = new Request.Builder() 
      .url(url) 
      .post(body) 
      .build(); 
    Response response = httpClient.newCall(request).execute(); 

あなたのために追加しよ残された唯一の事はきちんとresponseを解析することです。このトピックについてはさまざまな解決策を見つけることができますが、私は個人的にはの回答をresponse.body().byteStream()に、Stringresponse.body().string()を使用しています。

これは簡潔ではありませんが、非常に徹底した説明ですので、少しでも分からなければ明確にお尋ねください。

+0

私が理解しているように、このインスタンスのOkHttpはHttpPostの単なる置き換えです。私の問題は、フロントエンドのページだけに認証リクエストを送信するアドレスがないことです。認証サーバーは、SQLiteベースで提供されているuserIDハッシュを使用してログインするので、ユーザー名とパスワードのあるページだけをサーバーに直接送信することはできません。ログイン後、ユーザーのハッシュをページから取得できますソースが、私はログインする前にそれを行うことはできませんので、私はリクエストを送信することはできません。私が必要とするのは、ページのユーザー名とパスワードを入力してからloginをクリックする方法です。 –

+1

あなたはアカウントを持っていると思われます。あなたがいないなら、それを作ってください。または、登録方法を尋ねている場合は、全く同じ、異なるURLとペイロードです。全体的に、同じことが起こります。 – Vucko

+0

私は[redditは楽しいです](https://github.com/talklittle/reddit-is-fun/blob/master/src/com/andrewshu/android/reddit/login/LoginTask.java)ログインしています。どのように動作するのか理解していますが、問題はREDDIT_LOGIN_URL(https://ssl.reddit.com/api/login)に相当するものがないため、通常のログインページ(https:// www。 reddit.com/login)どうすればいいですか? –

関連する問題