Как я могу подключить свое приложение angular -nativescript к БД для входа в систему? - PullRequest
1 голос
/ 10 января 2020

Я пытаюсь создать приложение с помощью NativeScript и Angular, которое будет управлять рабочим временем сотрудников в компании.

Итак, я должен настроить страницу входа в систему, и есть моя проблема : Я связал функцию нажатием кнопки «ВХОД» и, нажав на нее, отправляю имя пользователя и пароль в службу, к которой пытаюсь подключиться, и к конечной точке (mypath/api/auth.php).

В этом php файле я установил соединение с БД и запрос SELECT, который получает имя пользователя и пароль в виде функции $ _POST. Но теперь, когда я нажимаю на кнопку «ВХОД», я получаю предупреждение с [Object Object], даже если учетные данные правильные или неправильные.

Я новичок как в NativeScript, так и в Angular.

Моя PHP функция подтверждения пользователя:

$username = $_POST["username"];
$password = $_POST["password"];
$conn = getDB();
$hash_pwd = hash('sha256', $password);

$stmt = $conn->prepare("SELECT * FROM dipendenti WHERE cod_fiscale=:username AND password=:password");
$stmt->bindParam("username", $username,PDO::PARAM_STR) ;
$stmt->bindParam("password", $hash_pwd,PDO::PARAM_STR) ;
$stmt->execute();
$count=$stmt->rowCount();
$data=$stmt->fetch(PDO::FETCH_OBJ);

closeDB($conn);
return json_encode($data);

Мой файл user.service.ts:

import { Injectable } from "@angular/core";
import { HttpClient, HttpHeaders, HttpResponse } from "@angular/common/http";
import { Observable, throwError } from "rxjs";
import { catchError, map, tap } from "rxjs/operators";

import { Auth } from "./auth.model";
import { Config } from "../config";

@Injectable()
export class AuthService {
    constructor(private http: HttpClient) { }

    login( user: Auth) {
        if(!user.codFiscale || !user.password) {
            return throwError("Devi inserire sia codice fiscale sia la tua password per accedere");
        }
        return this.http.post(Config.apiUrl + 'api/auth.php', 
            JSON.stringify({
                username: user.codFiscale,
                password: user.password
            }),
            { 
                headers: this.getCommonHeaders()
            }).pipe(
                map(response => response),
                catchError(this.handleErrors)
            );
    }

    getCommonHeaders() {
        return {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "*"
        }
    }

    handleErrors(error: Response) {
        console.log(JSON.stringify(error));
        return throwError(error);
    }
}

Моя функция срабатывает при нажатии кнопки:

submitLogin() {
        if(this.isLoggingIn) {
            this.authService.login(this.user).subscribe(
                () => {
                    this.router.navigate(["/home"]);
                },
                (exception) => {
                    if(exception.error && exception.error.description) {
                        alert(exception.error.description);
                    } else {
                        alert(exception.error);
                    }
                }
            );
        }
    }

Есть что-то, что я забыл?

1 Ответ

1 голос
/ 10 января 2020

Я делаю это в nativescript- vue, возможно, вам нужно настроить на angular. Для этого я использую плагин ax ios, он работает и для ns- angular, я просто не знаю, как настроить его на angular ... но код такой:

async submitLogin() {

            const data = {
                email: this.user.email,
                password: this.user.password
            };

            try {
                const res = (await api.post(this.getApiUrl+"/app/services/login.php", data)).data;
                if (res.code === 200){
                    //handle login success
                }
                else if (res.code === 500){
                    //handle login fail
                }
            }
            catch (e) {
                console.error("Connection error: ", e);
            }
        },

где api.post:

post(url, request, config) {
    return axios.post(url, request, config)
        .then((response) => Promise.resolve(response))
        .catch((error) => Promise.reject(error));
},

Редактировать: res.code - это пользовательский ответ, который я отправляю в ответе, он не по умолчанию!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...