2016-04-10 25 views
0

Azureに展開した後に外部ログインプロバイダに問題がありますが、外部プロバイダ(GoogleとFacebook)で認証できましたが、ユーザーがクリックして登録するとエラーが発生します。asp.net mvc AzureでOAuth外部ログインに失敗しました

「メンバーシップAPI」の使用と「canEdit」ロールの追加に関するこのチュートリアルに続いています。メンバーシップAPIを使用して

それは、ローカルホスト上でうまく働いたが、私はそれが正常にGoogleやFBに認証し、ExternalLoginConfirmation.cshtmlに取得し、利用者が登録を押すことができます紺碧のために展開するとき、それはその後、表示https://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth-sql-database/

'リクエストの処理中にエラーが発生しました。'

DB上のAzure ASPNetUsersテーブルに接続することができ、ユーザーが作成されていることができます。ユーザーは実際にログインをクリックしてサイトに入ることができます。ただし、ユーザーは 'canEdit'ロールに追加されていないため、確認中に部分的に完了または失敗するようです。私はなぜこれがローカルホスト上で動作するのかAzureではないのか分かりません。私はAzureにも新しいデプロイメントを構築しました。 ExternalLoginConfirmationのAccountcontrollerメソッドにエラーがありますか?このエラーは、ユーザーを「canEdit」ロールに追加するときに発生しますが、Azure上でのみローカルホストには追加されません。

// POST: /Account/ExternalLoginConfirmation 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl) 
    { 
     if (User.Identity.IsAuthenticated) 
     { 
      return RedirectToAction("Index", "Manage"); 
     } 

     if (ModelState.IsValid) 
     { 
      // Get the information about the user from the external login provider 
      var info = await AuthenticationManager.GetExternalLoginInfoAsync(); 
      if (info == null) 
      { 
       return View("ExternalLoginFailure"); 
      } 
      var user = new ApplicationUser { 
       UserName = model.DisplayName, 
       Email = model.Email, 
       OAuthName = model.OAuthName, 
       DisplayName = model.DisplayName, 
       ForceID = model.ForceID, 
       NeighID = model.NeighID, 
       MyLatLng = model.MyLatLng 
      }; 
      var result = await UserManager.CreateAsync(user); 
      if (result.Succeeded) 
      { 
       result = await UserManager.AddLoginAsync(user.Id, info.Login); 
       if (result.Succeeded) 
       { 
        await UserManager.AddToRoleAsync(user.Id, "canEdit"); 
        await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); 
        return RedirectToLocal(returnUrl); 
       } 
      } 
      AddErrors(result); 
     } 

     ViewBag.ReturnUrl = returnUrl; 
     return View(model); 
    } 

誰でも基本的なデバッグ手順をお勧めしますか?エラーログを表示する方法はありますか? (私がこれを初めて知ったように謝罪する - ガイダンスは高く評価された)。

+0

理解できませんでした。あなたの問題はAzureだけですか?次に、「...(GoogleとFacebook)と言うが、ユーザーがクリックして登録するとエラーが表示される」 。あなたの問題を最初に特定することをお勧めします。 – ozgur

+0

こんにちはOzgur、はい、問題はAzureだけです。 localhostではすべて正常に動作し、ユーザは両方のOAuthプロバイダによって認証され、Aspnetusersテーブルに正常に入力されると、新しいCanEditロールが割り当てられます。それは私が問題を抱えているAzureにあり、ユーザーはFB&Googleによって認証され、ExternalLoginConfirmationページに移動し、登録を押すとエラーが表示されます。ユーザーはログインをクリックしてアプリケーションにサインインし、Azure DBを調べると、ユーザーはAspnetuserテーブルにありますが、新しい「canedit」ロールはありません。私は新しいプロジェクトを含めAzureに2回展開しました。 –

+0

私は、ユーザーを認証するOAuth2.0プロバイダとしてGoogle&Facebookです。 –

答えて

0

Azureデータベースを調べたところ、新しい役割が 'AspNetRoles'テーブルに存在しないことがわかりました。そのため、ユーザーは 'AspNetUsers'テーブルにユーザーを追加していましたが、役割を割り当てるときにエラーが発生しました。

同様の問題が発生する可能性がある人は、3つの表を確認してください。

AspNetRoles - check all 'roles' are present 
AspNetUsers - check all 'users' are present 
AspNetUserRoles - check user and associated roles 

私のエラー私は「コードファーストマイグレーションを実行」を選択されなかった「公開Webウィザード」の設定]タブで、アプリケーションを公開された方法でした。

関連する問題