Как получить идентификатор пользователя firebase из облачной функции firebase - PullRequest
0 голосов
/ 02 ноября 2019

Мой пользователь перенаправлен из моего приложения на веб-сайт, который в конечном итоге возвращает ответ на URI перенаправления. У меня есть облачная функция в firebase, которая прослушивает эту ссылку и получает ответ. Теперь я хотел бы сохранить эту информацию вместе с данными пользователя Firebase, который запустил процесс? Например, я хотел бы сохранить ответ в Firestore в именах документов как userID. Как я могу достичь этого?

Я добавил изображение моего процесса enter image description here

Вот моя функция

exports.connectStripeStandardAccount = functions.https.onRequest((req, res) => {

  let authCode = req.query.code;
  //here I would like to get the uid of the user who triggered the website
  return res.send(authCode);

  });
});

Вот код для шага № 1 (мое приложение написано в трепетании)

ссылка в этом формате ссылка = https://connect.stripe.com/oauth/authorize?response_type=code&client_id=xxxxxxxxxxxx&scope=read_write

_launchURLWebsite(String link) async {
    if (await canLaunch(link)) {
      await launch(link);
    } else {
      throw 'Could not launch $link';
    }
  }

Спасибо

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Из разных комментариев к вашему вопросу видно, что вы используете Stripe Connect OAuth Reference .

В документации (ссылка выше) объясняется, что вы можете добавить stateпараметр к вашему запросу, который представляет собой «произвольное строковое значение, которое мы вам передадим».

Итак, добавив параметр state к вашему URL, как показано ниже:

https://connect.stripe.com/oauth/authorize?response_type=code&client_id=xxxxxxxxxxxx&scope=read_write&state=theuidofyouruser

вы получите значение state в качестве параметра строки запроса в своей облачной функции, как описано здесь: https://stripe.com/docs/connect/oauth-reference#get-authorize-response

В облачной функции вы можете получить значение state, выполнив req.query.state см. документацию по облачным функциям по этому вопросу.

0 голосов
/ 02 ноября 2019

Я думаю, это должно сработать для вас. Используя этот метод, вы сможете вызывать пользователя uid из любого места

Установить пакет провайдера (https://pub.dev/packages/provider#-installing-tab-), добавив его в ваши зависимости pubspec.yaml.

pubspec.yaml

dependencies:
  provider: ^3.1.0+1

Затем создайте новый файл dart с именем auth.dart (вы можете назвать его как угодно ...

Внутри этого файла создайте новый класс с именем Auth, например,this:

import 'package:firebase_auth/firebase_auth.dart';

class Auth {

String userId;

final FirebaseAuth _auth = FirebaseAuth.instance;

String get userId {
    return _userId;
  }

void getUserID() async{
    FirebaseUser user = await _auth.currentUser();
    _userId = user.uid;
  }

}

Затем в вашем файле main.dart 1017 *

импортируйте пакет поставщика, добавив этот импорт:

import 'package:provider/provider.dart';

, а также в файл main.dartПрямо перед возвратом вашего MaterialApp (return MaterialApp...)

Оберните его новым виджетом, подобным следующему:

Consumer<Auth>(
 builder: (ctx, auth, _) => MaterialApp(...),),

Теперь внутри любого виджета, где вы хотите вызвать идентификатор пользователя, вы можетесделай это ..

@override
  Widget build(BuildContext context) {

final auth = Provider.of<Auth>(context);

return Container(
 child: Text(auth.uid);
 );
}


...