Ionic2 Ionic 2:使用链接登录

Ionic2 Ionic 2:使用链接登录,ionic2,linkedin,Ionic2,Linkedin,我正在尝试在我的ionic 2应用程序中使用linked实现登录/注册。出于同样的目的引用此文件。根据文档,必须首先使用OAuth 2.0进行身份验证。为了做到这一点,我在web上找到了几个可以在应用程序浏览器中使用的解决方案。下面是我当前的代码,在单击“登录”按钮时执行 import { InAppBrowser } from '@ionic-native/in-app-browser'; export class LoginPage { constructor(public navCt

我正在尝试在我的ionic 2应用程序中使用linked实现登录/注册。出于同样的目的引用此文件。根据文档,必须首先使用OAuth 2.0进行身份验证。为了做到这一点,我在web上找到了几个可以在应用程序浏览器中使用的解决方案。下面是我当前的代码,在单击“登录”按钮时执行

import { InAppBrowser } from '@ionic-native/in-app-browser';

export class LoginPage {

 constructor(public navCtrl: NavController ) {}

 const browser =
 this.iab.create('https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=81zzocd5beagbo&scope=r_basicprofile%20r_emailaddress&state=STATE&redirect_uri=http://localhost:8100&scope=r_fullprofile%20r_emailaddress%20w_share');


     browser.show();

}
我现在面临以下问题

  • 成功登录链接后,它将被重定向到developer.linkedin.com网站中指定的重定向URL,该URL将在创建应用程序时提及
  • 我需要知道我必须指定的URL是什么,以便在成功登录/取消后将其重定向回应用程序
  • 我如何从特定的URL中提取代码,state,该URL用于调用linkedin get API以获取用户详细信息
  • 或者如果在linkedIn中有任何登录/注册的最佳实践,请更新我 注意:我已经提到了爱奥尼亚2。但除非用户在其设备中安装了linkedin应用程序,否则我们无法使用该插件

  • 我需要知道我必须指定的URL是什么,以便在成功登录/取消后将其重定向回应用程序
  • 以上将解决url回调url问题

    我知道你们不能使用IONIC LINKEDIN插件,因为当LINKEDIN应用程序安装在设备上时,它就会工作

    下面是我用来登录LinkedIn并获取登录用户详细信息的代码

    public linkedInLogin(): Promise<any> {
        return new Promise(function (resolve, reject) {
    
          var browserRef = cordova.InAppBrowser.open("https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id=XXXXXXXXX&redirect_uri=http://localhost/callback&state=XXXXXXXX&scope=r_basicprofile%20r_emailaddress")
          browserRef.addEventListener("loadstart", (event) => {
            console.log("event.url 1 -> " + event.url);
            if ((event.url).indexOf("http://localhost/callback") === 0) {
              browserRef.removeEventListener("exit", (event) => { });
              browserRef.close();
              console.log("event.url 2 -> " + event.url);
              var parsedResponse = {};
    
              var code = (event.url.split("=")[1]).split("&")[0];
              var state = event.url.split("=")[2];
    
              if (code !== undefined && state !== null) {
                console.log("code : " + code + "  state : " + state);
                parsedResponse["code"] = code;
                //parsedResponse["state"] = state;
                resolve(parsedResponse);
              } else {
                reject("Problem authenticating with LinkedIn");
              }
            }
          });
          browserRef.addEventListener("exit", function (event) {
            reject("The LinkedIn sign in flow was canceled");
          });
        });
      }
    
    在上面的函数中,用您的替换client_Id和client_Secret

    getLinkedInUserDetails(token: string) {
        let headers = new Headers({
          'Content-Type': 'application/x-www-form-urlencoded',
          'Authorization': 'Bearer ' + token//,
    
        });
        let options = new RequestOptions({
          headers: headers,
    
        });
    
        return this.http.get("https://api.linkedin.com/v1/people/~:(id,first-name,last-name,email-address,picture-url)?format=json", options).toPromise()
          .then(res => res.json(), err => err);
      }
    
    这是一段很长的代码,但我发现这是在ionic 2中使用LinkedIn的最佳方法

    希望这个答案有帮助


    如果您对上述代码有任何疑问/错误,请告诉我。

    你好,伊凡,谢谢您的回复。如果我将其用作重定向URL,则会出现错误“应用程序被拒绝,连接被拒绝”。你能告诉我什么是我可以使用的回拨url吗?嗨,瓦桑斯,非常欢迎你。你是否在你的linkedIn开发者帐户上添加了“授权重定向URL”?看看这个链接上的图片:Ya Irfan,我已经这么做了。成功登录后,我收到了此错误和Irfan,您是否在ionic 2或1中使用“cordova.InAppBrowser.open”方法实现了上述代码…为了修复cordova未定义的错误,请执行此操作-->在您的导入语句后粘贴此“declare var cordova:any;”
    getLinkedInUserDetails(token: string) {
        let headers = new Headers({
          'Content-Type': 'application/x-www-form-urlencoded',
          'Authorization': 'Bearer ' + token//,
    
        });
        let options = new RequestOptions({
          headers: headers,
    
        });
    
        return this.http.get("https://api.linkedin.com/v1/people/~:(id,first-name,last-name,email-address,picture-url)?format=json", options).toPromise()
          .then(res => res.json(), err => err);
      }