facebook - Flutter Facebook 网页登录
问题描述
我已经尝试过Flutter Facebook Login包,它在 android 中可以正常工作,但在 web 中我没有被重定向到 Facebook 进行身份验证。试过这个包的人可以帮忙吗?
解决方案
此插件不支持网络。
但是有人更新了代码来支持它 romulojjunior flutter_facebook_login (link defunct)
如果你想使用它:
flutter_facebook_login:
git:
url: git@github.com:romulojjunior/flutter_facebook_login.git
ref: v1.3.0-web
也可以尝试使用firebase_auth进行 Facebook 身份验证:
import 'dart:html' as html;
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
final FirebaseAuth _auth = FirebaseAuth.instance;
void main() {
String token;
if (html.window.location.href.contains("access_token")) {
String url = html.window.location.href.replaceFirst("#/", "?"); // workaround for readable redirect url
Uri uri = Uri.parse(url);
if (uri.queryParameters.keys.contains("access_token")) token = uri.queryParameters["access_token"];
}
runApp(
MaterialApp(
title: 'Facebook Sign In',
home: SignIn(
token: token,
)),
);
}
class SignIn extends StatefulWidget {
final String token;
const SignIn({Key key, this.token}) : super(key: key);
@override
_SignInState createState() => _SignInState();
}
class _SignInState extends State<SignIn> {
String _message;
final String clientId = "FBClientId";
final String redirectUri = "http://localhost";
@override
void didChangeDependencies() {
super.didChangeDependencies();
if (widget.token != null) _signInWithFacebook(widget.token);
}
void _signInWithFacebook(String token) async {
setState(() {
_message = "Loading...";
});
final AuthCredential credential = FacebookAuthProvider.getCredential(
accessToken: token,
);
final FirebaseUser user = (await _auth.signInWithCredential(credential)).user;
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(user.uid == currentUser.uid);
setState(() {
if (user != null) {
_message = 'Successfully signed in with Facebook. ' + user?.displayName.toString();
} else {
_message = 'Failed to sign in with Facebook. ';
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
children: <Widget>[
Text(_message ?? "Please try to sign in"),
RaisedButton(
onPressed: () {
html.window.open(
"https://www.facebook.com/dialog/oauth?response_type=token&scope=email,public_profile,&client_id=${clientId}&redirect_uri=${redirectUri}",
"_self");
},
child: Text('Facebook login'),
),
],
),
),
);
}
}
不要忘记为 web 添加 firebase:
README.md 为firebase
启用 facebook 登录(1-3 开始步骤之前):
firebase-facebook
推荐阅读
- php - 如何使用 PHP 和 XML 示例创建 SOAP 请求?
- django - 即使重新安装后 Django 也完全崩溃了
- json - `JSONDecoder` 如何知道使用哪种编码?
- c++ - 何时包含
程序中的标题? - java - JPA EntityManager 在数据库重新启动后拒绝工作
- python - ValueError 的例外情况:
- r - 以紧凑格式呈现的 R 降价表
- node.js - POST 400 错误请求、React、Node/Express、MongoDB
- symfony - (Symfony 4) 无法注入我用 composer 安装的 github 库
- ubuntu - 在安装包中避免“sudo apt install”