首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是一个很好的方法混合FB连接和ASP成员资格吗?

这是一个很好的方法混合FB连接和ASP成员资格吗?
EN

Stack Overflow用户
提问于 2012-07-05 22:55:14
回答 2查看 454关注 0票数 0

我喜欢与asp成员合作,我需要在一个网站上的FB整合,所以我不想混淆他们。以下是我的计划:

代码语言:javascript
复制
1) Implement method that get data from user FB account (firstname, lastname, username, email)
2) When I get the data, use asp membership CreateUser() method to make user in database
3) Send user temporary password to email

我计划使用来自fb的电子邮件作为用户名,这样用户就可以使用fb按钮登录,或者输入他们的电子邮件和密码。

发行

  • 我有时会收到来自fb的用户电子邮件的null;如果电子邮件是空的,那么我就不能用它来使会员成为用户。
  • 这是一个很好的方式使用记忆体和fb?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-06 07:38:32

3)发送用户临时密码到电子邮件 我计划使用来自fb的电子邮件作为用户名,这样用户就可以使用fb按钮登录,或者输入他们的电子邮件和密码。

我不会给他们发密码。为什么,这只是通过不安全的电子邮件发送的另一条明智的信息。

相反,如果他们用Facebook登录到我们的网站,我会给他们设置密码。如果他们选择这样做,他们也可以登录他们的用户名和密码-如果没有,他们仍然可以通过Facebook登录。

我刚刚检查了我们的数据库--看起来几乎只有那些在我们的站点上使用了FB登录并且有密码集的用户是那些在我们实现FB登录之前已经存在帐户的用户。在通过FB登录时创建的帐户中,似乎只有少数拥有密码集。他们为什么要这么做?为了方便起见,他们选择使用FB登录注册一个帐户--为什么现在只设置另一个想要被记住的…密码就会损害这个帐户呢??

我有时会收到来自fb的用户电子邮件的null;如果电子邮件可以是null,那么我就不能使用它来使会员成为用户。

我听说过这封电子邮件是零问题,虽然还没有遇到它自己。很明显,这是由于电子邮件地址不是必须创建FB帐户的时候,你也可以使用你的电话号码。

但是在这种情况下,你仍然有他们的用户名,所以你可以用username@facebook.com来代替丢失的电子邮件地址-- Facebook最近设置了它,这样每个用户现在都有了这个电子邮件地址。

这是一个很好的方式使用记忆体和fb?

我在我们的网站上也是这样做的。如果有人通过FB登录,如果我们已经在系统中的FB用户in和用户帐户之间建立了连接,我将检查数据库;如果是的话,我会登录该用户帐户,如果没有,我会创建一个新的帐户。效果很好。

票数 1
EN

Stack Overflow用户

发布于 2012-07-06 08:01:43

下面是我是如何做到的(也许不是最好的方法,但它是有效的):

  1. 我创建标准的记忆表
  2. 2.添加另一个表,将用户链接到普通Id,而不是Guids,这样,当有人想查看用户配置文件时,我不必将guids放在url中,而且我还有字段DisplayName,因此多个用户可以拥有相同的DisplayName
  3. C#的使用和C#库
  4. 向Account Controller添加以下代码段(尚未完成,但有效):
代码语言:javascript
复制
   [AllowAnonymous]
        public ActionResult LoginOpenID(string provider, string returnUrl)
        {
            using (var openid = new OpenIdRelyingParty())
            {
                var response = openid.GetResponse();

            if (response == null)
            {
                try
                {
                    var request = openid.CreateRequest(provider);

                    var fetchRequest = new FetchRequest();

                    fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email);

                    fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.Alias);

                    fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.FullName);

                    request.AddExtension(fetchRequest);

                    request.AddCallbackArguments("returnUrl", returnUrl);

                    return request.RedirectingResponse.AsActionResult();

                }
                catch (ProtocolException pExp)
                {

                }
                catch (WebException Wexp)
                {

                }
                catch (ArgumentException aexp)
                {
                }
            }

            else
            {
                switch (response.Status)
                {
                    case AuthenticationStatus.Authenticated:

                        var fetch = response.GetExtension<FetchResponse>();

                        string alias = fetch.GetAttributeValue(WellKnownAttributes.Name.Alias);

                        string email = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);

                        string fullname = fetch.GetAttributeValue(WellKnownAttributes.Name.FullName);

                        if (string.IsNullOrEmpty(alias))

                            alias = response.ClaimedIdentifier;

                        if (alias.Contains("google"))
                        {
                            Random random = new Random();

                            int randomNumber = random.Next(1000000000);

                            alias = "user" + randomNumber;
                        }

                        if (string.IsNullOrEmpty(email))

                            email = response.ClaimedIdentifier;

                        //Now see if the user already exists, if not create them

                        if (email.Contains("gmail.com") && Membership.FindUsersByEmail(email).Count > 0)
                        {
                            var cookie = FormsAuthentication.GetAuthCookie(Membership.GetUserNameByEmail(email), true);

                            Response.AppendCookie(cookie);
                        }

                        else if (Membership.GetUser(response.ClaimedIdentifier) == null && Membership.FindUsersByEmail(email).Count == 0)
                        {

                            MembershipCreateStatus membershipCreateStatus;

                            string password = GetRandomString(6, 9);

                            MembershipUser user = Membership.CreateUser(response.ClaimedIdentifier.ToString(),

                                password,

                                email,

                                "This is an OpenID account. You should log in with your OpenID.",

                                GetRandomString(5, 7),

                                true,

                                out membershipCreateStatus);

                            if (membershipCreateStatus != MembershipCreateStatus.Success)
                            {

                                TempData["message"] = "Unsuccessful creation of Account. " + membershipCreateStatus.ToString();

                                return RedirectToAction("Login", "Account");

                            }

                            if (membershipCreateStatus == MembershipCreateStatus.Success)
                            {
                                user.Comment = alias;

                                Membership.UpdateUser(user);

                                using (MyContext context = new MyContext())
                                {
                                    Data.UserShortId userShortId = new Data.UserShortId { Guid = (Guid)user.ProviderUserKey, DisplayName = alias };
                                    context.UserShortIds.InsertOnSubmit(userShortId);
                                    context.SubmitChanges();
                                }
                            }
                            // Use FormsAuthentication to tell ASP.NET that the user is now logged in,  

                            // with the OpenID Claimed Identifier as their username. 

                            var cookie = FormsAuthentication.GetAuthCookie(response.ClaimedIdentifier, true);

                            Response.AppendCookie(cookie);
                        }

                        else
                        {
                            var cookie = FormsAuthentication.GetAuthCookie(response.ClaimedIdentifier, true);

                            Response.AppendCookie(cookie);
                        }

                        break;
                    case AuthenticationStatus.Canceled:

                        TempData["message"] = "Login was cancelled at the provider";

                        return RedirectToAction("Login", "Account");

                    case AuthenticationStatus.Failed:

                        TempData["message"] = "Login failed using the provided OpenID identifier";

                        return RedirectToAction("Login", "Account");
                }
            }

            if (Url.IsLocalUrl(returnUrl))
            {
                return Redirect(returnUrl);
            }

            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
    }

    private static Random random = new Random(46258975);

    public static int GetRandomInteger(int min, int max)
    {
        return random.Next(min, max + 1);
    }

    public static string GetRandomString(int minLength, int maxLength)
    {
        int strLength = GetRandomInteger(minLength, maxLength);

        StringBuilder builder = new StringBuilder();
        char ch;
        for (int i = 0; i < strLength; i++)
        {
            ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
            builder.Append(ch);
        }
        return builder.ToString().ToLower();
    }

认证时:

代码语言:javascript
复制
 @using (Html.BeginForm("LoginOpenId", "Account", FormMethod.Post))
           {
                @Html.Hidden("returnUrl", Request.QueryString["ReturnUrl"])
                <p>Login using:</p>
                <input type="submit" class="login-btn facebook" name="provider" value="http://facebook-openid.appspot.com/" />
                <input type="submit" class="login-btn google" name="provider" value="https://www.google.com/accounts/o8/id" />
                <input type="submit" class="login-btn yahoo" name="provider" value="http://me.yahoo.com/" />
           }

正如您所看到的,这还没有完成,我使用的是非官方的FB OpenID提供程序,但是您可以编写用OAuth单独处理Fb登录的案例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11353613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档