2014-04-29 10 views
8

मैं अपने एएसपी.NET एमवीसी 5/वेबएपी 2 प्रोजेक्ट में ओविन के बाहरी प्रमाणीकरण प्रदाताओं का उपयोग कर रहा हूं और मैंने एक अजीब समस्या को मारा है।पहला बाहरी लॉगिन प्रयास लॉगिन कार्रवाई पर वापस रीडायरेक्ट करता है, दूसरा एक काम करता है

लॉगिन वर्कफ़्लो बिल्कुल SO पर जैसा है। उपयोगकर्ता, प्रवेश पृष्ठ हिट एक प्रदाता उठाता है और में लॉग होता है मेरे समस्या यह है कि एक प्रदाता पर पहले क्लिक एक ही लॉगइन पेज पर वापस रीडायरेक्ट कर देता है:।

http://localhost:57291/Account/Login?ReturnUrl=%2fAccount%2fExternalLogin 

यह मतलब होता अगर ExternalLogin कार्रवाई की कमी की जाएगी AllowAnonymous विशेषता।

जब उपयोगकर्ता दूसरी बार क्लिक करता है तो सब कुछ काम करता है।

मैंने यह भी कोशिश की है कि विभिन्न ब्राउज़रों के साथ और समस्या क्रोम, आईई 11 और फ़ायरफ़ॉक्स में सुसंगत है।

Login.cshtml:

@using (Html.BeginForm("ExternalLogin", "Account", new { ReturnUrl = ViewBag.ReturnUrl })) 
{ 
    <fieldset> 
     <legend>@Strings.ExternalAuthenticationProvidersDescription</legend> 
     <p> 
      @foreach (var p in Model.ExternalAuthenticationProviders) 
      { 
       <button type="submit" name="provider" value="@p.AuthenticationType" title="Log in using your @p.Caption account">@p.Caption</button> 
      } 
     </p> 
    </fieldset> 
} 

AccountController.cs

public class AccountController : Controller 
{ 
    ... 

    [AllowAnonymous] 
    [HttpPost] 
    public ActionResult ExternalLogin(string provider, string returnUrl) 
    { 
     return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new 
     { 
      loginProvider = provider, 
      ReturnUrl = returnUrl 
     })); 
    } 
    ... 
} 

ChallengeResult.cs:

public class ChallengeResult : HttpUnauthorizedResult 
{ 
    public ChallengeResult(string provider, string redirectUrl) 
    { 
     LoginProvider = provider; 
     RedirectUrl = redirectUrl; 
    } 

    public string LoginProvider { get; set; } 
    public string RedirectUrl { get; set; } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     context.HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties 
     { 
      RedirectUri = RedirectUrl 
     }, LoginProvider); 
    } 
} 

FilterConfig.cs

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 

     // make all api controllers secure by default 
     filters.Add(new AuthorizeAttribute()); 
    } 
} 

उत्तर

8

बाहर कर देता है मुद्दा यह था कि अपने प्रोजेक्ट शुरू में एक MVC 4 आवेदन जो समस्या पैदा कर web.config में यह था के रूप में शुरू:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" /> 
</authentication> 

मुझे लगता है कि दोनों Owin और प्रपत्र प्रमाणीकरण एक ही समय में सक्रिय था।

+0

यह वास्तव में मेरे लिए तय किया गया है! धन्यवाद –

0

मेरे पास एक ही समस्या है जो तब होती है जब मैं ASPNet.Web.Pages.Web.Data 3.1.1 को किसी भी बाद के संस्करणों में अद्यतन करता हूं। 3.1.1 के साथ यह काम करता है! मुझे समाधान here मिला।

0

जैसे फॉर्म प्रमाणीकरण जोड़ा गया था, मुझे लॉगिन पृष्ठ पर रीडायरेक्ट किया जा रहा था। तो, यह कोड को निकालने के

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" /> 
</authentication> 

मदद की, लेकिन मैं इस लाइन को जोड़ने के लिए और साथ ही

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules> 
     <remove name="FormsAuthentication" /> <-- added this line to remove it completely --> 
    </modules> 
</system.webServer> 

आशा है कि यह किसी को मदद मिलती है था।

संबंधित मुद्दे

 संबंधित मुद्दे