从cookie获取用户并在mvc Identity中签署该用户

时间:2018-03-26 15:03:57

标签: asp.net-mvc asp.net-identity

我有一个Asp MVc网络项目。为了销售产品,用户应该注册或登录我的网站。选择产品后,用户将通过PaymentAction方法重定向到银行网关:

1

付款后,用户通过以下网址重定向到我的网站:

 public String PaymentAction( TransAction Model )
    {
        try
        {
            Payment ob = new Payment();
            Model.amount = 100000.ToString();
            string result = ob.pay(Model.amount);
            //, User.Identity.GetUserId()
            /*
             the result var is a string that contains the response from pay.ir/send
             which contains: status, transId, errorCode, errorMessage and all things that
             exist in JsonParameter
             */

            JsonParameters Parmeters = JsonConvert.DeserializeObject<JsonParameters>(result);
            // in this point the payment was successful and you can add info to your database
            if ( Parmeters.status == 1 )
            {

                Response.Redirect("https://pay.ir/payment/gateway/" + Parmeters.transId);

            }
            else
            {
                return "error code : " + Parmeters.errorCode + "<br />" + "message " + Parmeters.errorMessage;
            }
            return "";
        }
        catch ( Exception exp )
        {
            return "error" + exp.Message;
        }
    }

这是VerifyPayment方法:

http://www.mymvcapp.com/HelpMeToBuildMyExtraordinaryYear/VerifyPayment

我们可以看到用户必须登录才能完成销售流程。但是在从银行重定向到上面的url(VerifyPayment)之后,用户没有登录,代码将返回null异常。 问题是如何在从银行重定向到我的网站后让用户登录? 或者如何从cookie中获取用户并在该用户中签名?

1 个答案:

答案 0 :(得分:0)

在获取用户的过程中会出现问题。我们应该使用这段代码来获取用户:

                  var user = System.
                        Web.
                        HttpContext.
                        Current.
                        GetOwinContext().
                        GetUserManager<ApplicationUserManager>().
                        FindById(userId);

请注意正确的方法如上所述。以下代码产生问题。 doNOT用它来获取当前用户:

             var user = db.Users.Where(u => u.Id == userId).FirstOrDefault();