如何使用 MVC 5 在基于令牌的身份验证中检查用户是不是从控制器登录?
Posted
技术标签:
【中文标题】如何使用 MVC 5 在基于令牌的身份验证中检查用户是不是从控制器登录?【英文标题】:How to check whether user is logged in or not from controller in Token Based Authentication using MVC 5?如何使用 MVC 5 在基于令牌的身份验证中检查用户是否从控制器登录? 【发布时间】:2019-07-19 04:40:36 【问题描述】:我在HomeController
中有ActonResult Data()
,我想显示 Data.cshtml 唯一已登录的用户。否则,它将返回 LogoutView.cshtml 页面
HomeController
public ActionResult Data()
bool isAuthenticated = User.Identity.IsAuthenticated;
if(isAuthenticated)
return View();
else
return View("LogoutView");
我在 MVC5 中使用基于令牌的身份验证。
我可以毫无问题地登录。
在我登录之前,我尝试去 http://localhost/Poject1/home/data,它显示 LogoutView.cshtml 符合我的预期。
登录后,我尝试访问相同的链接http://localhost/Poject1/home/data,它也显示了Data.cshtml。
但是我确实使用下面的代码注销了,然后我尝试访问http://localhost/Poject1/home/data,但它仍然显示Data.cshtml
<input id="btnLogout" type="button" value="Logout" />
<script type="text/javascript">
$(document).ready(function ()
$('#btnLogout').click(function ()
console.log('Get Token = '+sessionStorage.getItem('accessToken'))
sessionStorage.removeItem('accessToken');
console.log('After remove Token = ' + sessionStorage.getItem('accessToken')) // it print null
);
)
</script>
登录脚本
<script type="text/javascript">
$(document).ready(function ()
$('#btnSignIn').click(function ()
var loginData =
grant_type: 'password',
username: $('#txtSignInEmail').val(),
password: $('#txtSignInPassword').val()
;
$.ajax(
type: 'POST',
url: 'Token',
data: loginData
).done(function (data)
console.log('Username =='+data.userName);
$('#user').text(data.userName)
$('#UserName').text(JSON.stringify(data.userName));
// Cache the access token in session storage.
console.log('Login Success');
sessionStorage.setItem('accessToken', data.access_token);
).fail(function (showError)
$('#signInError').text(JSON.stringify(showError));
);
);
)
</script>
【问题讨论】:
因为您在客户端使用 javascript 从 sessionStorage 中删除密钥,所以服务器不知道用户是否已注销。您必须在$('#btnLogout').click
中调用控制器操作方法并在服务器上注销用户。
@PriyankPanchal 那么我该怎么做呢?
请编辑您的问题以分享您的登录方法的代码。
@PriyankPanchal 你现在可以查看我的更新吗?..
我们需要您的服务器端登录方法。
【参考方案1】:
you can use Autherize Filter on controller level as well as you use this filter on Action Level. you can also customize it.
【讨论】:
欢迎来到 Stack Overflow。请详细说明您的答案并使用正确的格式***.com/help/how-to-answer以上是关于如何使用 MVC 5 在基于令牌的身份验证中检查用户是不是从控制器登录?的主要内容,如果未能解决你的问题,请参考以下文章
检查用户是不是在 ASP.NET Core 中使用基于令牌的身份验证登录
混合身份验证 - 基于 Spring MVC 会话 + 基于 JWT 令牌