Skip to content

第三方平台联合登陆(facebook、微信、微博、QQ、Kakao)

License

Notifications You must be signed in to change notification settings

seven1986/OAuthLogin.AspNetCore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OAuthLogin.AspNetCore Build status NuGet Join the chat at https://gitter.im/OAuthLogin/OAuthLogin Average time to resolve an issue GitHub license

NuGet downloads (OAuthLogin) NuGet downloads (OAuthLogin.AspNetCore)
NuGet downloads OAuthLogin NuGet downloads OAuthLogin.AspNetCore

Installation

OAuthLogin.AspNetCore is available as a NuGet package. You can install it using the NuGet Package Console window:

PM> Install-Package OAuthLogin.AspNetCore

If you are looking for the ASP.NET version please head to OAuthLogin project.


Usage

第一步:配置appsettings.json文件

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "Credentials": {
    "QQ": {
      "client_id": "",
      "client_secret": ""
    },
    "Wechat": {
      "client_id": "",
      "client_secret": ""
    },
    "Weibo": {
      "client_id": "",
      "client_secret": ""
    },
    "FaceBook": {
      "client_id": "",
      "client_secret": ""
    },
    "KaKao": {
      "client_id": "",
      "client_secret": ""
    }
  },
}

第二步:在Startup.cs配置微博、微信、QQ、facebook、Kakao的client_id、client_secret

 // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    // for HttpContext
    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    var Credentials = Configuration.GetSection("Credentials").Get<CredentialsSetting>();

    LoginProvider.UseWeibo(Credentials.Weibo.client_id, Credentials.Weibo.client_secret);

    LoginProvider.UseQQ(Credentials.QQ.client_id, Credentials.QQ.client_secret);

    LoginProvider.UseFaceBook(Credentials.FaceBook.client_id, Credentials.FaceBook.client_secret);

    LoginProvider.UseWechat(Credentials.Wechat.client_id, Credentials.Wechat.client_secret);

    LoginProvider.UseKakao(Credentials.KaKao.client_id); 
}

第三步:添加Controllers/OAuthController.cs

public class OAuthController : Controller
    {
        IHttpContextAccessor _contextAccessor;

        public OAuthController(IHttpContextAccessor
                  contextAccessor) { this._contextAccessor = contextAccessor; }

        public IActionResult QQ()
        {
            var res = new QQ(_contextAccessor).Authorize();

            if (res != null && res.code == 0)
            {
                return RedirectToLogin(new
                {
                    channel = "qq",
                    code = 0,
                    user = new
                    {
                        uid = res.result.Value<string>("openid"),
                        name = res.result.Value<string>("nickname"),
                        img = res.result.Value<string>("figureurl"),
                        token = res.token
                    }
                });
            }

            return View();
        }

        public IActionResult Wechat()
        {
            var res = new Wechat(_contextAccessor).Authorize();

            if (res != null && res.code == 0)
            {
                return RedirectToLogin(new
                {
                    channel = "wechat",
                    code = 0,
                    user = new
                    {
                        uid = res.result.Value<string>("uid"),
                        name = res.result.Value<string>("nickname"),
                        img = res.result.Value<string>("headimgurl"),
                        token = res.token
                    }
                });
            }

            return View();
        }

        public IActionResult Weibo()
        {
            var res = new Weibo(_contextAccessor).Authorize();

            if (res != null && res.code == 0)
            {
                return RedirectToLogin(new
                {
                    channel = "weibo",
                    code = 0,
                    user = new
                    {
                        uid = res.result.Value<string>("idstr"),
                        name = res.result.Value<string>("name"),
                        img = res.result.Value<string>("profile_image_url"),
                        token = res.token
                    }
                });
            }

            return View();
        }

        public IActionResult Facebook()
        {
            var res = new Facebook(_contextAccessor).Authorize();

            if (res != null && res.code == 0)
            {
                return RedirectToLogin(new
                {
                    channel = "facebook",
                    code = 0,
                    user = new
                    {
                        uid = res.result.Value<string>("id"),
                        name = res.result.Value<string>("name"),
                        img = res.result["picture"]["data"].Value<string>("url"),
                        token = res.token
                    }
                });
            }

            return View();
        }

        public IActionResult Kakao()
        {
            var res = new Kakao(_contextAccessor).Authorize();

            if (res != null && res.code == 0)
            {
                return RedirectToLogin(new
                {
                    channel = "kakao",
                    code = 0,
                    user = new
                    {
                        uid = res.result.Value<string>("uid"),
                        name = res.result.Value<string>("nickname"),
                        img = res.result.Value<string>("thumbnail_image"),
                        token = res.token
                    }
                });
            }

            return View();
        }

        RedirectResult RedirectToLogin(object _entity)
        {
            var OAuthResult = JsonConvert.SerializeObject(_entity);

            // 跳转的页面,union参数后面是编码后的用户数据
            var url = "/login?union=" + WebUtility.UrlEncode(OAuthResult);

            return Redirect(url);
        }
    }

第四步:添加5个空页面,页面里不要有代码

1,Views/OAuth/QQ.cshtml

2,Views/OAuth/Facebook.cshtml

3,Views/OAuth/Wechat.cshtml

4,Views/OAuth/Webo.cshtml

5,Views/OAuth/Facebook.cshtml

About

第三方平台联合登陆(facebook、微信、微博、QQ、Kakao)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages