> ## Documentation Index
> Fetch the complete documentation index at: https://www.ayrshare.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Generate JWT अवलोकन

> किसी user profile के लिए सोशल नेटवर्क लिंकिंग URL उत्पन्न करें।

export const PlansAvailable = ({plans = [], maxPackRequired}) => {
  let displayPlans = plans;
  if (plans && plans.length === 1) {
    const lowerCasePlan = plans[0].toLowerCase();
    if (lowerCasePlan === "business") {
      displayPlans = ["Launch", "Business", "Enterprise"];
    } else if (lowerCasePlan === "premium") {
      displayPlans = ["Premium", "Launch", "Business", "Enterprise"];
    }
  }
  return <Note>
Available on {displayPlans.length === 1 ? "the " : ""}
{displayPlans.join(", ").replace(/\b\w/g, l => l.toUpperCase())}{" "}
{displayPlans.length > 1 ? "plans" : "plan"}.

{maxPackRequired && <span onClick={() => window.open('https://www.ayrshare.com/docs/additional/maxpack', '_self')} className="flex items-center mt-2 cursor-pointer">
 <span className="px-1.5 py-0.5 rounded text-sm" style={{
    backgroundColor: '#C264B6',
    color: 'white',
    fontSize: '12px'
  }}>
   Max Pack required
 </span>
</span>}
</Note>;
};

<PlansAvailable plans={["business"]} maxPackRequired={false} />

[generateJWT endpoint](/apis/profiles/generate-jwt) एकल User Profile के लिए सोशल नेटवर्क लिंकिंग URL उत्पन्न करता है।
अधिक विवरण के लिए [Business Plan and Launch Plan API integration](/multiple-users/api-integration-business) देखें।

## प्रोफ़ाइल स्विच करना

विभिन्न प्रोफ़ाइल सत्रों के बीच स्विच करने के लिए (उदाहरण के लिए, कई प्रोफ़ाइल के साथ परीक्षण करते समय), आपको पहले वर्तमान प्रोफ़ाइल को लॉग आउट करना होगा। प्रोफ़ाइल स्विचिंग को सही ढंग से संभालने के तरीके पर निर्देशों के लिए [Automatic Logout of a Profile Session](/multiple-users/api-integration-business#automatic-logout-of-a-profile-session) देखें।

## Private Key और Profile Key

### Private Key कहाँ से प्राप्त करें

Private Key फ़ाइल (private.key) और एक सैंपल Postman JSON फ़ाइल आपके [Integration Package](/multiple-users/api-integration-business#integration-package) के साथ शामिल है, जो onboarding के दौरान प्राप्त होता है।
Integration Package को Ayrshare डेवलपर डैशबोर्ड में API पृष्ठ -> Integration Package में भी प्राप्त किया जा सकता है।

### Private Key का उपयोग

हम अनुशंसा करते हैं कि Private Key private.key को एक फ़ाइल से पढ़ें और इसे `privateKey` फ़ील्ड में स्ट्रिंग के रूप में भेजें, जो आपको newlines सहित सभी वर्णों को संरक्षित करने की अनुमति देता है।
Private Key सटीक होनी चाहिए, अर्थात newlines सहित सभी वर्णों को संरक्षित रखना चाहिए।
यदि आप कुंजी को अपने कोड में पेस्ट करते हैं, तो आपको newlines को मैन्युअल रूप से `\n` वर्ण से बदलना पड़ सकता है या स्ट्रिंग को URL एन्कोड करना पड़ सकता है।

कुंजी को सीधे कोड में पेस्ट करने से अक्सर समस्याएँ होती हैं।

## JSON Web Token उत्पन्न करें

JSON Web Token (JWT) उत्पन्न करने का तरीका समझाने वाला 1 मिनट का वीडियो:

<div class="video-container">
  <iframe width="380" height="200" src="https://www.youtube.com/embed/JI232HBWHWc" title="Generate a JSON Web Token" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" />
</div>

JWT URL **5 मिनट** के लिए मान्य है। 5 मिनट के बाद आपको एक नया JWT URL उत्पन्न करना होगा।
अतिरिक्त विकल्पों के लिए [Max Pack `expiresIn`](/apis/profiles/generate-jwt-overview#jwt-expires-in) देखें।

## JWT URL खोलना

JWT URL को एक नए ब्राउज़र टैब, ब्राउज़र विंडो, या iOS पर View Controller में खोलें।

आप नई विंडो या टैब के [बंद करने या पुनर्निर्देशन](/multiple-users/api-integration-business#opening-and-closing-the-social-linking-url) को नियंत्रित कर सकते हैं।

<Note>
  सोशल नेटवर्क URL को iFrame में खोलने या approved partner origin domain profile.ayrshare.com को अस्पष्ट करने की अनुमति नहीं देते हैं।
</Note>

## JWT URL सत्यापित करें

`generateJWT` एंडपॉइंट डिफ़ॉल्ट रूप से लौटाए गए JWT URL को सत्यापित नहीं करता है।
उदाहरण के लिए, यदि एक भ्रष्ट Private Key `generateJWT` में पास की जाती है, तो एक URL अभी भी लौटाया जाएगा और URL 401 एरर देगा।

आप `generateJWT` बॉडी पैरामीटर में `verify: true` शामिल करके लौटाए गए JWT URL को सत्यापित कर सकते हैं। यदि JWT URL को सत्यापित नहीं किया जा सकता है तो एक त्रुटि लौटाई जाएगी। उदाहरण के लिए, यदि Private Key से एक वर्ण हटा दिया गया है तो निम्नलिखित लौटाया जाएगा:

```json JWT Error theme={"system"}
{
  "action": "JWT",
  "status": "error",
  "code": 189,
  "message": "Error generating JWT. Check the sent parameters, such as the privateKey has no extra tabs, spaces, or newlines. Also the entire private.key file including -----BEGIN RSA PRIVATE KEY----- and -----END RSA PRIVATE KEY-----. Error: secretOrPrivateKey must be an asymmetric key when using RS256"
}
```

हम केवल गैर-प्रोडक्शन वातावरण में `verify: true` का उपयोग करने की अनुशंसा करते हैं क्योंकि सत्यापन में अतिरिक्त प्रोसेसिंग समय लगता है।

## Postman में परीक्षण

पहले [Postman](/testing/postman) में JWT URL निर्माण का परीक्षण करना **अनुशंसित** है।
Integration Package में, जो डैशबोर्ड के Primary Profile API Key पृष्ठ पर पाया जाता है, एक नमूना Postman config JSON फ़ाइल शामिल है जिसमें JWT URL निर्माण को सत्यापित करने के लिए आवश्यक सब कुछ शामिल है।
बस config फ़ाइल को Postman में इम्पोर्ट करें, `profileKey` *body* फ़ील्ड में अपनी Profile Key (Ayrshare डेवलपर डैशबोर्ड में उस प्रोफ़ाइल पर स्विच करके जिसका आप परीक्षण करना चाहते हैं) भरें, और नीले *Send* बटन पर क्लिक करें।
अन्य सभी आवश्यक फ़ील्ड पहले से भरे हुए हैं।

आप [Postman से कोड भी उत्पन्न कर सकते हैं](/testing/postman#auto-generate-api-code-with-postman), या किसी निर्देशिका या डेटाबेस से कुंजी फ़ाइल पढ़ सकते हैं।

## Instagram लिंक विधि

Instagram अकाउंट [दो तरीकों](/dashboard/connect-social-accounts/instagram) से लिंक किए जा सकते हैं: सीधे **Instagram Login** के साथ, या **connected Facebook Page** के माध्यम से।
जब कोई उपयोगकर्ता सोशल लिंकिंग पृष्ठ पर Instagram बटन क्लिक करता है तो कौन सा फ्लो शुरू होता है, यह सामान्य रूप से डैशबोर्ड में अकाउंट-वाइड [Instagram Login](/multiple-users/manage-user-profiles#instagram-login) सेटिंग द्वारा नियंत्रित होता है।

[generateJWT endpoint](/apis/profiles/generate-jwt) का `instagramLinkMethod` बॉडी पैरामीटर आपको एकल लिंकिंग URL के लिए उस सेटिंग को ओवरराइड करने देता है:

| मान         | Instagram लिंकिंग फ्लो                               |
| ----------- | ---------------------------------------------------- |
| `instagram` | सीधा Instagram Login। कोई Facebook Page आवश्यक नहीं। |
| `facebook`  | कनेक्टेड Facebook Page के माध्यम से लिंक।            |

उदाहरण के लिए, यदि आपका अकाउंट डिफ़ॉल्ट Facebook Page लिंकिंग है, तो निम्नलिखित केवल इस लिंकिंग सत्र के लिए सीधे Instagram Login को बाध्य करता है:

```json Instagram Link Method theme={"system"}
{
  "instagramLinkMethod": "instagram"
}
```

उत्पन्न JWT URL में ओवरराइड शामिल होगा, और लिंकिंग पृष्ठ पर Instagram बटन क्लिक करने से उस सत्र की अवधि के लिए अनुरोधित फ्लो शुरू हो जाएगा — Instagram/Facebook प्राधिकरण पुनर्निर्देशन के दौरान भी।

कुछ बातें जानने योग्य हैं:

* ओवरराइड केवल लौटाए गए URL से खोले गए लिंकिंग पृष्ठ पर लागू होता है। यह आपकी अकाउंट-वाइड Instagram Login सेटिंग को नहीं बदलता है और न ही अन्य लिंकिंग सत्रों को प्रभावित करता है।
* यदि `instagramLinkMethod` को छोड़ दिया जाता है, तो लिंकिंग पृष्ठ आपकी अकाउंट-वाइड सेटिंग का उपयोग करता है, बिल्कुल पहले जैसा।
* यदि एक अमान्य मान भेजा जाता है, तो मान्य मानों (`instagram`, `facebook`) को सूचीबद्ध करते हुए एक `400` त्रुटि लौटाई जाती है।
* ओवरराइड चुनने से पहले दो फ्लो के बीच [फ़ीचर अंतर](/multiple-users/manage-user-profiles#direct-instagram-login-vs-facebook-page-authentication) की समीक्षा करें — कुछ Instagram फ़ीचर, जैसे हैशटैग खोज और सहयोग, केवल Facebook Page प्रमाणीकरण के साथ उपलब्ध हैं।

## JWT Expires In

<PlansAvailable plans={["business"]} maxPackRequired />

यदि आप डिफ़ॉल्ट 5 मिनट से अधिक JWT टाइमआउट चाहते हैं, तो `expiresIn` फ़ील्ड शामिल करें।

उदाहरण के लिए, JWT URL को 30 मिनट के लिए मान्य सेट करने के लिए निम्नलिखित JSON भेजें:

```json JWT Expires In theme={"system"}
{
  "expiresIn": 30
}
```

यह आपको अपने उपयोगकर्ताओं को [लिंक ईमेल करने](/apis/profiles/generate-jwt-overview#connect-accounts-email) की अनुमति देता है, बजाय उनके आपके ऐप या प्लेटफ़ॉर्म पर जाने के।
एक सामान्य उपयोग-मामला यह है कि जब आपके उपयोगकर्ता को सोशल अकाउंट को फिर से कनेक्ट करने की आवश्यकता होती है, तो आप उन्हें अपने प्लेटफ़ॉर्म पर नेविगेट करने के बजाय सोशल अकाउंट को सीधे फिर से लिंक करने के लिए JWT लिंक ईमेल कर सकते हैं।

<Warning>
  अपनी सुरक्षा टीम के साथ समीक्षा करें कि आपका व्यवसाय JWT को कितने समय तक जीवित रखना चाहता है।
  लंबे expire समय एक अनधिकृत पक्ष द्वारा लिंक तक पहुँच बनाने का अतिरिक्त जोखिम पैदा करते हैं।
</Warning>

## एकीकरण

### Bubble.io JWT

यदि आप Bubble उपयोगकर्ता हैं, तो निर्देशों के लिए Bubble.io अनुभाग में *Generate JWT Token* देखें:

<Card title="Bubble Generate JWT" icon="link" href="/packages-guides/bubble#generate-jwt-token-in-bubble" horizontal />

### Mobile JWT

निम्नलिखित Swift, Flutter, और React Native [मोबाइल कोड उदाहरण](/apis/profiles/generate-jwt-overview#mobile-code-examples) दिखाते हैं कि iOS डिवाइस पर सोशल लिंकिंग पृष्ठ कैसे लॉन्च करें।
`jwtURL` String वेरिएबल को [/generateJWT endpoint](/apis/profiles/generate-jwt) से मिलने वाले रिटर्न से बदलें।

#### Swift (iOS)

Swift में, `UIViewController` और `SFSafariViewControllerDelegate` का उपयोग करें।
हम `WebView` के उपयोग की अनुशंसा नहीं करते क्योंकि Facebook और Google जैसे कुछ सोशल नेटवर्क प्रमाणीकरण को ब्लॉक करते हैं।

#### Flutter (Dart)

Flutter (Dart) में, `UIViewController` या `SFSafariViewController` का कोई सीधा समकक्ष नहीं है।
हालाँकि, आप वेब URL खोलने के लिए `url_launcher` पैकेज का उपयोग करके समान कार्यक्षमता प्राप्त कर सकते हैं।

#### React Native

React Native में भी `SFSafariViewController` का कोई सीधा समकक्ष नहीं है, लेकिन आप `expo-web-browser` द्वारा प्रदान किए गए `WebBrowser` API के साथ समान परिणाम प्राप्त कर सकते हैं, जो सिस्टम ब्राउज़र के साथ कुकीज़ साझा करने वाली एक मॉडल ब्राउज़र विंडो में URL खोलता है। अन्यथा, आप Safari खोलने के लिए बिल्ट-इन React Native `Linking` फ़ंक्शन का उपयोग कर सकते हैं: `await Linking.canOpenURL(jwtURL);`

#### मोबाइल कोड उदाहरण

<CodeGroup>
  ```swift Swift theme={"system"}
  import UIKit
  import SafariServices

  class ViewController: UIViewController, SFSafariViewControllerDelegate {
      
      var jwtURL = "https://profile.ayrshare.com?domain=acme&jwt=eyJhbGciOiJ"

      override func viewDidLoad() {
          super.viewDidLoad()
          setupButton()
      }
      
      func setupButton() {
          let button = UIButton(type: .system)
          button.frame = CGRect(x: (view.bounds.width - 200) / 2, y: (view.bounds.height - 50) / 2, width: 200, height: 50)
          button.setTitle("Open URL", for: .normal)
          button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
          view.addSubview(button)
      }

      @objc func buttonTapped() {
          openURLInInAppBrowser()
      }

      func openURLInInAppBrowser() {
          if let url = URL(string: jwtURL) {
              let safariVC = SFSafariViewController(url: url)
              safariVC.delegate = self
              present(safariVC, animated: true, completion: nil)
          }
      }

      // Optional: If you want to handle when the in-app browser is closed
      func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
          controller.dismiss(animated: true, completion: nil)
      }
  }
  ```

  ```dart Flutter theme={"system"}
  /** yaml dependencies
    dependencies:
      flutter:
        sdk: flutter
      url_launcher: ^6.2.1
  */

  import 'package:flutter/material.dart';
  import 'package:url_launcher/url_launcher.dart';

  void main() {
    runApp(MyApp());
  }

  class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
      return MaterialApp(
        title: 'URL Launcher Example',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(),
      );
    }
  }

  class MyHomePage extends StatelessWidget {
    final String jwtURL = "https://profile.ayrshare.com?domain=acme&jwt=eyJhbGciOiJ";

    @override
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(
          title: Text('URL Launcher Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              openURLInBrowser(context);
            },
            child: Text('Open URL'),
          ),
        ),
      );
    }

    void openURLInBrowser(BuildContext context) async {
      if (await canLaunch(jwtURL)) {
        await launch(jwtURL);
      } else {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('Could not launch $jwtURL'),
          ),
        );
      }
    }
  }
  ```

  ```jsx React Native theme={"system"}
  /**
  • Using the API provided by expo-web-browser,
  • which opens a URL in a modal browser window that shares cookies
  • with the system browser.

  • Learn more about expo: https://reactnative.dev/docs/environment-setup?guide=quickstart
  • and running the following command:
  • expo install expo-web-browser
  */

  import React from 'react';
  import { StyleSheet, Button, View } from 'react-native';
  import * as WebBrowser from 'expo-web-browser';

  export default function App() {
    const jwtURL = 'https://profile.ayrshare.com?domain=acme&jwt=eyJhbGciOiJ';

    const openURLInBrowser = async () => {
      try {
        await WebBrowser.openBrowserAsync(jwtURL);
        // Optional: WebBrowser.openBrowserAsync returns a promise that resolves with an object containing
        // 'type' that can be 'cancelled' or 'dismissed'. You can use this to handle when the browser is closed.
      } catch (error) {
        console.error(error);
      }
    };

    return (
      <View style={styles.container}>
        <Button title="Open URL" onPress={openURLInBrowser} />
      </View>
    );
  }

  const styles = StyleSheet.create({
    container: {
      flex: 1,
      justifyContent: 'center',
      alignItems: 'center',
    },
  });
  ```
</CodeGroup>

## Connect Accounts Email

<max_pack />

लंबे expire समय विकल्प के साथ, आप Ayrshare को अपने उपयोगकर्ताओं को सोशल लिंकेज पृष्ठ का लिंक ईमेल करवा भी सकते हैं।

### Connect Accounts JSON

उदाहरण के लिए निम्नलिखित JSON `john@user.com` पर ACME कंपनी नाम, संपर्क ईमेल `support@mycompany.com`, और terms और privacy policy के लिंक के साथ एक ईमेल भेजेगा:

```json Example Contact Email Request theme={"system"}
/**
  All fields are in the email object required.
  Missing fields will cause the email to fail.
*/
{
  "email": {
    "to": "john@user.com",
    "contactEmail": "support@mycompany.com",
    "company": "ACME",
    "termsUrl": "https://www.ayrshare.com/terms",
    "privacyUrl": "https://www.ayrshare.com/privacy",
    "expiresIn": 60
  }
}
```

यदि ईमेल और expire समय सेट किया गया था तो प्रतिक्रिया में निम्नलिखित शामिल होगा:

```json Example Contact Email Response theme={"system"}
{
  "emailSent": true,
  "expiresIn": "30m"
}
```

### JWT Connect Accounts Email उदाहरण

यहाँ Connect Account लिंक के साथ एक ईमेल का उदाहरण है जो सोशल लिंकेज पृष्ठ खोलता है:

<img src="https://mintcdn.com/ayrshare-docs/Nmrhj2Gh7WSf62Bh/images/apis/profiles/jwt-email.webp?fit=max&auto=format&n=Nmrhj2Gh7WSf62Bh&q=85&s=fbe4ee86ca59c26a5bd5b289fda96b8b" alt="JWT Email" width="563" class="center" data-path="images/apis/profiles/jwt-email.webp" />

ईमेल इस पते से आएगा:

`Social Connect Hub <connect@socialconnecthub.com>`
