2015-10-26 11 views
10

私はXamarin.Formsアプリを持っています。私はFaceBookとAzureに基づいてその認証機能を実装したいと思います。 (名前、電子メール...)Azure Mobile Web Appで基本的なユーザー情報を取得する方法は?

var user = await DependencyService.Get<IMobileClient>() 
      .LoginAsync(MobileServiceAuthenticationProvider.Facebook); 

サーバー側で

var mobileAppUser = (MobileAppUser)User; 
var facebookCredentials = 
    user.GetIdentityAsync<FacebookCredentials>().Result; 

mobileAppUserは存在しますが、facebookCredentialsはある認証自体は動作しますが、私はそれから、基本的なユーザー情報を取得する方法を発見していません常にnullです。

私のバックエンドAzureは、.netで書かれた新しいモバイルWebアプリです。この認証に関する質問を除いて、すべての機能は素晴らしいです。私はサーバー側またはクライアント側でこの問題を解決する適切な方法を見つけることができませんでした。 Pls。私の質問は古い古典的なものではなく、Azureのモバイルアプリの新しい方法に関するものです。

私を助けることがとても親切ですか?すべてのサンプルコードまたはドキュメントは、歓迎されます。

ありがとうございます!

+0

は私が知っているドント役立ちますが、私はそれができると感じます。http:// WWW。または、http://blogs.msdn.com/b/carlosfigueira/archive /2012/10/25/getting-user-information-on-azure-mobile-services.aspxまたはhttp://stackoverflow.com/questions/25463125/azure-mobile-service-with-facebook-auth-get-user -info。彼らがあなたを解決策に導くことを願っています。がんばろう。 –

+0

私の友人に感謝します。私はこれらのものを含むいくつかの文書を読みましたが、私の問題を解決する助けにはなりませんでした。 – Tom

+2

あなたは大歓迎です。私は彼らがあなたを助けなかったのを悲しい、幸運。 –

答えて

0

非同期呼び出しを使用すると、操作が完了するのを待つ必要があり、完了後に結果が利用可能になります。あなたは多くの方法でこれを行うことができますが、この場合には最も自然は次のようになります。コメントを

var facebookCredentials = await user.GetIdentityAsync<FacebookCredentials>(); 
// Here you can use your facebookCredentials variable: 
+0

タスクの結果を待っても、完了を待ちます。 – Tom

+2

はい、そうです。まだ試してみる価値があります。実装の詳細を決して知らない –

+0

ありがとうございました、私は早くそれを試しました、他の些細なことのように。 – Tom

5

あまりにも長い間、あなたがGetIdentityAsyncの実装をチェックアウトする場合は、以下を参照してくださいよ

  • ユーザーが認証された場合、それはから"EMA_RuntimeUrl"を読み込み
  • (あなたはここで何も問題はありませんので、ユーザが認証されていることを言った)をチェックconfig(それはnullではないので例外が出るので)
  • プロバイダからのトークンが有効かどうかをチェックします。そうでない場合は、nullを返します。

私はこれがあなたが取り組んでいる問題だと思います。この問題のクイック検索ではthisですのでご質問ください。

アプリケーションプロパティのAzureポータルでモバイルアプリケーションでEMA_RuntimeUrlを手動で作成し、ゲートウェイアドレスに割り当てましたか?

+0

ありがとう! Azureでアプリケーションを作成すると、EMA_RuntimeUrlの設定が自動的に作成されます。私は何も変えなかった。その値はゲートウェイのURLであり、このURLをブラウザで開くと、「ゲートウェイが起動しました」と表示されます。 – Tom

+0

だから、私はこの設定が大丈夫だと思うし、私の問題は依然として存在する。 – Tom

+1

これは間違いなく設定上の問題のようです。あなたのコードは正しいです。どんな追加情報もなければ何も言うのは難しいでしょう。 [This](https://github.com/Azure/azure-content/blob/master/articles/app-service-mobile/app-service-mobile-dotnet-backend-migrating-from-mobile-services.md#認証の考慮事項)移行の助けは、「ゲートウェイの/ signin- *エンドポイントを各プロバイダの追加のリダイレクトURIとして追加する」と言います。 _ [AZURE.NOTE] _もあり、Facebookにも適用される可能性があります。 – Tamas

0

これは本当に助けになるのか分かりませんが、試してみます。私が理解しているように、あなたはこのためにFacebookのミドルウェアとasp.netのアイデンティティを使用しています。私もこれを使用するが、Googleのoauthミドルウェアの代わりに、Facebookの。私が正しいとすれば、これは解決策になるはずです

ミドルウェアで認証リクエストを行う場合、プロバイダ(facebook)との認証プロセスが成功した後にリダイレクトされるコールバックURLを指定しました。外部認証を要求するには、このURLを指定してChallangeResultと呼んでください。このコールバックに達したら、IAuhtnticationManagerGetExternalLoginInfoAsync()メソッドをコールバックメソッドの最初のステップとして使用できます。 IAuthenticationManagerインスタンスを取得するには、HttpContext.GetOwinContext().Authenticationプロパティを読み取ることができます。この後、あなたはIIdentity実装として、ユーザーに関するすべての必要な情報を取得することができます - GetExternalLoginInfoAsync()戻りExternalIdentityインスタンス

希望、それはあなたを助けることができるかどう

関連する問題