2016-02-29 5 views
9

मैं नए asp.net core मॉडल पर एक वेब एप्लिकेशन माइग्रेट कर रहा हूं, और एक दृश्य के साथ अचानक झगड़ा मारा है।asp.net mvc core - user.IsSignedIn के समतुल्य()

मैं नए मॉडल के तहत User और User.IsSignedIn() के लिए चले बराबर नहीं मिल सकता है - जब विचारों में प्रयोग किया जाता है, इस तरह ...

@using System.Security.Claims 
@if (User.IsSignedIn()) 
{ 
} 

मैं Microsoft.AspNetCore.Mvc.Razor पुस्तकालय आयात करने की कोशिश की है, जहां मैं यह सोचा होगा आयोजित किया जाना चाहिए, लेकिन ऐसा लगता है कि ऐसा नहीं लगता है।

उत्तर

7

दृष्टिकोण RC2 के लिए ASP.NET टीम द्वारा अपनाई उपयोग करने के लिए है SignInManager.IsSignedIn:

@using Microsoft.AspNetCore.Identity 
@using Mvc.Server.Models 

@inject SignInManager<ApplicationUser> SignInManager 
@inject UserManager<ApplicationUser> UserManager 

@if (SignInManager.IsSignedIn(User)) { 
    <form asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm" class="navbar-right"> 
     <ul class="nav navbar-nav navbar-right"> 
      <li> 
       <a asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a> 
      </li> 
      <li> 
       <button type="submit" class="btn btn-link navbar-btn navbar-link">Log off</button> 
      </li> 
     </ul> 
    </form> 
} 
else { 
    <ul class="nav navbar-nav navbar-right"> 
     <li><a asp-controller="Account" asp-action="Register">Register</a></li> 
     <li><a asp-controller="Account" asp-action="Login">Log in</a></li> 
    </ul> 
} 
+0

उपयोगकर्ता का मूल्य कहां से आता है? – Ciel

+0

मैं इसे आज़माता हूं, और यह कहता है कि "उपयोगकर्ता" वर्तमान संदर्भ में मौजूद नहीं है। – Ciel

+0

यह संभावना है कि आप आरसी 2 पैकेज का उपयोग कर रहे हैं: वीएस अभी भी आरसी 1 टूलींग पर निर्भर करता है, और बेस व्यू पेज क्लास द्वारा उजागर संपत्तियों तक पहुंचने में असमर्थ है। आप इस त्रुटि को सुरक्षित रूप से अनदेखा कर सकते हैं;) – Pinpoint

17

प्रवास डॉक्स मुझे लगता है कि यह यह कर सकते हैं को देखते हुए:

@using System.Security.Principal 

@if (User.Identity.IsAuthenticated) 
{ 
... 
} 

यहाँ मिला: http://aspnetmvc.readthedocs.org/projects/mvc/en/latest/migration/migratingauthmembership.html

+0

यह वास्तव में था! धन्यवाद! – Ciel

+1

यह सही उत्तर है – hidden

1

दरअसल, पहले के उत्तर हमेशा सही नहीं होते हैं, क्योंकि यह "साइन इन" के अर्थों पर निर्भर करता है। कोर में, आईप्रिंसिपल एक दावा प्रिंसिपल है। हालांकि इसकी पहचान संपत्ति है, जो दावा दावों की तरह है, यह पहचान संपत्ति संग्रह में केवल पहली वस्तु है। यह पुराने एएसपी.NET के लिए पीछे की संगतता के लिए काफी हद तक है। नई दुनिया में, दूसरों के लिए कोई भी पहचान अनिवार्य रूप से आधिकारिक नहीं है ... वे सभी मान्य हैं।

इनमें से प्रत्येक पहचान में एक मान्यता प्राप्त संपत्ति है। उदाहरण के लिए, आप एक पहचान कर सकते हैं जो किसी अज्ञात उपयोगकर्ता को उससे जुड़े कुछ दावों के साथ ट्रैक कर रहा है, इसलिए जो भी पहचान बनाई गई है, वह संभवतः गलत पर सेट की गई है। दूसरी तरफ, कुकी ऑथ के लिए नलसाजी इसे सही तरीके से सेट करती है जब आपने साइन इन विधि कहा है, लेकिन फिर से, यह इस बात पर निर्भर करता है कि आपके ऐप का एक विशेष भाग किस प्रकार ध्यान दे रहा है।

इसके अलावा, आरटीएम संस्करण में, कोई IsSignedIn नहीं है।

+0

जेफ़ ने आपने 'SignInManager.IsSignedIn (उपयोगकर्ता) '(https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNetCore.Identity/SignInManager.cs#L110) चेक किया है जिसका उपयोग एमवीसी- कोर टेम्पलेट्स? ऐसा लगता है कि किसी भी 'ApplicationCookieAuthenticationScheme' को लॉग इन माना जाता है। –

+0

हां, मुझे लगता है कि अब मौजूद है। याद रखें, हालांकि, यह मानता है कि आप पहचान पैकेज पर निर्भरता लेना चाहते हैं। पहचान उपयोगकर्ता डेटा की सभी नलसाजी और दृढ़ता को नियंत्रित कर सकती है, लेकिन यदि आप अपनी भूमिका निभाना चाहते हैं, तो आपको केवल सुरक्षा की आवश्यकता है। –