I am working with angular version of native script and trying to create a login system to my network.
Below is my code that attempts to log into the network.
home.component.ts
import { LoginService } from '../Services/login/login.service';
export class LoginComponent implements OnInit {
public user: User;
loginForm: FormGroup;
constructor(private router: Router,
private userService: UserService,
private page: Page,
public loginDetails: LoginDetails,
private LoginService: LoginService
) {
this.user = new User();
this.user.email = "[email protected]";
this.user.password = "pass123";
this.user.logo = "~/Images/opos_logo.png";
}
submit() {
/* set a user variable with data from the formGroup */
const user: string = this.user.email;
/* set a password variable with data from the formGroup */
const password: string = this.user.password;
this.LoginService.loginUser(user, password)
.subscribe(data => this.checkUser(data));
}
}
Services/login/login.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from "@angular/core";
import { Jwt } from '../../Classes/jwt';
@Injectable({
providedIn: 'root'
})
export class LoginService {
loginUrl = 'http://localhost/Login.w';
constructor(private _http: HttpClient) { }
loginUser(user, pass) {
return this._http.get<Jwt>(
this.loginUrl, { params: { fi_user: user, fi_pass: pass } });
}
}
When I tried to run my app like this I would get the following error:
"originalStack": "Error: java.io.IOException: Cleartext HTTP traffic to localhost not permitted\n at new ZoneAwareError (file:///data/data/org.nativescript.preview/files/app/tns_modules/@nativescript/angular/zone-js/dist/zone-nativescript.js:1298:31)\n at onRequestComplete (file:///data/data/org.nativescript.preview/files/app/tns_modules/@nativescript/core/http/http-request/http-request.js:54:30)\n at Object.onComplete (file:///data/data/org.nativescript.preview/files/app/tns_modules/@nativescript/core/http/http-request/http-request.js:43:7)"
To tried to fix the issue by following the suggestions on the post Android 8: Cleartext HTTP traffic not permitted and followed the advice on that post. I added a androidmanifest.xml file to my program (this was not already part of the application as such I am not sure if the application is accessing the file) on the path /App_Resources/Android/AndroidManifest.xml.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="__PACKAGE__"
android:versionCode="1"
android:versionName="1.0">
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"/>
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="__APILEVEL__"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:name="com.tns.NativeScriptApplication"
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:networkSecurityConfig="@xml/network_security_config">
<activity
android:name="com.tns.NativeScriptActivity"
android:label="@string/title_activity_kimera"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@style/LaunchScreenTheme">
<meta-data android:name="SET_THEME_ON_LAUNCH" android:resource="@style/AppTheme" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.tns.ErrorReportActivity"/>
</application>
I also added a network_security_config.xml file which the Stack overflow post was suggesting to the path res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">domain.com (to be adjusted)</domain>
</domain-config>
</network-security-config>
I also tried to add the application android:usesCleartextTraffic="true" tag to my home.component.html to fix the error but this did not resolve the issue.
Try with:
loginUrl = 'http://10.0.2.2/Login.w';
I just have read article: https://stackoverflow.com/a/48591525 @EdwardGarson wrote:
From the emulator, localhost or 127.0.0.1 refers to the emulator itself, not your local machine. You need to use ip 10.0.2.2, which is bridged to your local machine.
Greetings
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With