Revised register flow.
parent
a175b08180
commit
a68cb347e0
|
@ -60,7 +60,7 @@ class UserApiProvider {
|
|||
}
|
||||
|
||||
Future<User> fetchUserById(String id) async {
|
||||
final jwt = loginManager.getToken();
|
||||
final jwt = await loginManager.getToken();
|
||||
try {
|
||||
final responseBody =
|
||||
await this.cache.fetch("$baseUrlCore/user/id/$id", headers: {
|
||||
|
@ -72,4 +72,20 @@ class UserApiProvider {
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> updateUser(String firstName, String lastName) async {
|
||||
final jwt = await loginManager.getToken();
|
||||
final user = await loginManager.getUser();
|
||||
final finalFirstName = firstName != "" ? firstName : user != null ? user.firstName : "";
|
||||
final finalLastName = lastName != "" ? lastName : user != null ? user.lastName : "";
|
||||
await http.patch("$baseUrlCore/user",
|
||||
headers: {
|
||||
HttpHeaders.contentTypeHeader: "application/json",
|
||||
HttpHeaders.authorizationHeader: "Bearer $jwt"
|
||||
},
|
||||
body: jsonEncode({
|
||||
"first_name": finalFirstName,
|
||||
"last_name": finalLastName,
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
import "dart:async";
|
||||
import "dart:convert";
|
||||
import "../models/user_model.dart";
|
||||
import "../resources/login_api_provider.dart";
|
||||
import "../resources/user_api_provider.dart";
|
||||
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
|
@ -15,6 +18,12 @@ class LoginManager {
|
|||
return token;
|
||||
}
|
||||
|
||||
Future<User> getUser() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
final userString = prefs.getString("user");
|
||||
return userString != null ? jsonDecode(userString) : null;
|
||||
}
|
||||
|
||||
// Throws error status code if it occurs
|
||||
Future<void> initAuthentication(String phoneNumber) async {
|
||||
try {
|
||||
|
@ -32,6 +41,19 @@ class LoginManager {
|
|||
await loginApiProvider.verifyOtp(otp, this.nonce, this.clientid);
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString("token", jwt);
|
||||
// Parse jwt to get userid
|
||||
final parts = jwt.split('.');
|
||||
if (parts.length != 3) {
|
||||
throw Exception('invalid token');
|
||||
}
|
||||
final payload = utf8.decode(base64Url.decode(parts[1]));
|
||||
final payloadMap = json.decode(payload);
|
||||
final userId = payloadMap['userid'];
|
||||
// Get user data
|
||||
final userApiProvider = UserApiProvider();
|
||||
final user =
|
||||
await userApiProvider.fetchUserById(userId);
|
||||
await prefs.setString("user", jsonEncode(user));
|
||||
return jwt;
|
||||
} catch (e) {
|
||||
throw e;
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
import "dart:async";
|
||||
import "../resources/login_api_provider.dart";
|
||||
import "../resources/user_api_provider.dart";
|
||||
|
||||
class RegisterManager {
|
||||
final loginApiProvider = LoginApiProvider();
|
||||
final userApiProvider = UserApiProvider();
|
||||
String nonce;
|
||||
|
||||
// Throws error status code if it occurs
|
||||
Future<void> initAuthentication(String phoneNumber) async {
|
||||
try {
|
||||
final nonce = await loginApiProvider.initAuthentication(phoneNumber);
|
||||
this.nonce = nonce;
|
||||
} catch (e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> registerUser(String firstName, String lastName, String phoneNumber, String otp) async {
|
||||
await userApiProvider.registerUser(firstName, lastName, phoneNumber, otp, this.nonce);
|
||||
}
|
||||
}
|
|
@ -49,9 +49,14 @@ class Welcome extends StatelessWidget {
|
|||
builder = (BuildContext _) =>
|
||||
OtpPage(buttonCallback: (String otp) async {
|
||||
final authToken = await loginManager.processOtp(otp);
|
||||
final user = await loginManager.getUser();
|
||||
|
||||
await ConversationManager.init(authToken);
|
||||
Navigator.of(context).pushReplacementNamed("/home");
|
||||
if (user.firstName == "" && user.lastName == "") {
|
||||
Navigator.pushNamed(context, 'welcome/register');
|
||||
} else {
|
||||
Navigator.of(context).pushReplacementNamed("/home");
|
||||
}
|
||||
});
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -5,7 +5,6 @@ import "../../widgets/text_button.dart";
|
|||
import "../../../services/login_manager.dart";
|
||||
import "../../../resources/user_api_provider.dart";
|
||||
|
||||
import "phone_input.dart";
|
||||
import "input.dart";
|
||||
|
||||
class RegisterPage extends StatefulWidget {
|
||||
|
@ -20,7 +19,6 @@ class RegisterPage extends StatefulWidget {
|
|||
class _RegisterPageState extends State<RegisterPage> {
|
||||
final String phoneSvg = "assets/phoneno.svg";
|
||||
|
||||
final phoneController = TextEditingController();
|
||||
final firstNameController = TextEditingController();
|
||||
final lastNameController = TextEditingController();
|
||||
|
||||
|
@ -28,7 +26,6 @@ class _RegisterPageState extends State<RegisterPage> {
|
|||
|
||||
@override
|
||||
void dispose() {
|
||||
phoneController.dispose();
|
||||
firstNameController.dispose();
|
||||
lastNameController.dispose();
|
||||
super.dispose();
|
||||
|
@ -69,9 +66,6 @@ class _RegisterPageState extends State<RegisterPage> {
|
|||
child: Input(
|
||||
controller: lastNameController,
|
||||
hintText: "Last name")),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 10.0),
|
||||
child: PhoneInput(controller: phoneController)),
|
||||
])
|
||||
]))),
|
||||
Padding(
|
||||
|
@ -81,14 +75,11 @@ class _RegisterPageState extends State<RegisterPage> {
|
|||
onClickCallback: () async {
|
||||
final firstName = firstNameController.text;
|
||||
final lastName = lastNameController.text;
|
||||
final phoneNumber = "+65${phoneController.text}";
|
||||
|
||||
// Creating the new user
|
||||
await userApiProvider.registerUser(
|
||||
firstName, lastName, phoneNumber);
|
||||
await widget.loginManager
|
||||
.initAuthentication("+65$phoneNumber");
|
||||
Navigator.pushNamed(context, 'welcome/otp');
|
||||
await userApiProvider.updateUser(
|
||||
firstName, lastName);
|
||||
Navigator.of(context).pushReplacementNamed("/home");
|
||||
})),
|
||||
]));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue