问题描述
我有以下任务:一个 angular 应用程序,它有一个登录组件,我必须通过 httpClient
向另一个使用 joomla 开发的现有应用程序发送凭据数据(用户名和密码)(用户名和密码)(1.5.26) ,因此身份验证任务必须在 joomla 中完成,并将经过身份验证的用户重定向到 joomla 中的下一页,我对 joomla 非常陌生,我尝试了一些有关使用此处论坛中建议的 PHP 脚本的解决方案,但它们不起作用我或我没有做对,我真的需要你的帮助,因为我过去了 5 天没有得到结果,提前致谢。
请注意,我的 Angular 应用程序在我的本地主机上,而 joomla 应用程序托管在另一台服务器上。
这是我尝试过的:
角度:
<form #loginform="ngForm" (ngSubmit)="login(loginform)">
<div class="formGroup">
<mat-form-field>
<input
matInput
required
type="text"
id="login"
name="username"
placeholder="username"
ngModel
/>
</mat-form-field>
</div>
<div class="formGroup">
<mat-form-field>
<input
matInput
minlength="5"
id="password"
required
name="password"
placeholder="password"
ngModel
/>
</mat-form-field>
</div>
<input
[disabled]="!loginform.valid"
class="submit"
type="submit"
value="Login"
/>
</form>
@Component({
selector: "app-login-joomla",templateUrl: "./login-joomla.component.html",styleUrls: ["./login-joomla.component.scss"],})
export class LoginJoomlaComponent implements OnInit {
constructor(private dataService: LoginService) {}
ngOnInit() {}
login(form: NgForm) {
{
this.dataService
.userlogin(form.value.username,form.value.password)
.subscribe(
(response) => console.log("Res provider :",response),(error) => console.log("err : ",error)
);
}
}
}
export class LoginService {
redirectUrl: string;
baseUrl: string = "https://test.com/scriptTest.PHP";
constructor(private httpClient: HttpClient) { }
public userlogin(username,password) {
let headerOptions = new HttpHeaders();
headerOptions.append('Access-Control-Allow-Origin','*');
headerOptions.append('Content-Type','application/json');
return this.httpClient.post<any>(this.baseUrl,{ username,password },{ headers: headerOptions })
}
对于 Joomla scriptTest.PHP
,我放在服务器的 public_html 文件夹下:
<?PHP
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Credentials: true');
header("Access-Control-Allow-Methods: PUT,GET,POST,DELETE");
header("Access-Control-Allow-Headers: Origin,X-Requested-With,Content-Type,Accept");
header("Content-Type: application/json; charset=UTF-8");
$postdata = file_get_contents("PHP://input");
$request = json_decode($postdata);
$uname = $request->username;
$upswd= $request->password;
$url = "https://test.com/test.html";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url );
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE );
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE );
curl_setopt($ch,CURLOPT_COOKIESESSION,CURLOPT_COOKIEJAR,realpath('./cookie.txt'));
curl_setopt($ch,CURLOPT_COOKIEFILE,CURLOPT_HEADER,TRUE );
$ret = curl_exec($ch);
if (!preg_match('/name="([a-zA-z0-9]{32})"/',$ret,$spoof)) {
preg_match("/name='([a-zA-z0-9]{32})'/",$spoof);
}
// POST fields
$postfields = array();
$postfields['username'] = $uname;
$postfields['passwd'] = $upswd;
$postfields['option'] = 'com_user';
$postfields['task'] = 'login';
$postfields[$spoof[1]] = '1';
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postfields);
$ret = curl_exec($ch);
// Get logged in cookie and pass it to the browser
preg_match('/^Set-Cookie: (.*?);/m',$m);
print_r($m);
$cookie=explode('=',$m[1]);
setcookie($cookie[0],$cookie[1]);
print_r($cookie);
print_r($postfields);
$loginRedirectUrl = 'index.PHP?option=com_content&view=article&id=14';
$loginRedirectUrl = base64_encode($loginRedirectUrl);
$postfields['return'] = $loginRedirectUrl;
header('Location: registered page url');
?>
结果:post 请求响应返回 $postfields,但 $cookie 数组为空,并且没有发生重定向。 我真的被卡住了,我不知道该怎么办,请帮忙!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)