如标题中所示,我想确保在移动应用或网络浏览器中使用API的用户是使用我的网站或我的移动应用的用户,没有第三方可以使用我的API
这可以通过为可以使用正确凭据登录的用户创建令牌来轻松完成,但我的项目包含经过身份验证的用户或未经过身份验证的用户可以执行CRUD的部分
基本上我只希望使用我的移动应用或我的网站的用户能够使用我的API,除了被授予访问权限的用户使用我的API之外,没有第三方可以使用我的API
答案 0 :(得分:0)
好吧,您可以从import com.intellij.openapi.diagnostic.Logger
def ctx = context(scope:closureScope())
contributor(ctx) {
Logger.getInstance("my-psi").info("I am here")
}
检查ApiController
并查看其标题。为此,您必须创建一个名为user_token
的表。该表应如下所示:
user_tokens
此表与+-----+---------+-----------+------------+
| id | user_id | usertoken | timestamps |
+-----+---------+-----------+------------+
表具有one-to-one
关系。在您要使用users
的设备中,您必须将此api
和user_id
作为usertoken
传递。然后,您必须通过以下代码检查headers
中的标头进行身份验证:
ApiController
以下是从api登录的示例:
public function checktoken(Request $request){
if ($request->headers->has('usertoken')) {
$token = $request->header('usertoken');
$usertoken = UserToken::where('usertoken',$token)->first();
if ($usertoken) {
return $usertoken;
}
return false;
}
return false;
}
现在您可以通过此方式检查来自服务器端的令牌(用户想要更改密码):
public function postlogin(Request $request){
$validator = Validator::make($request->all(), User::$auth_rules);
if ($validator->fails()){
$result['status']='fail';
$result['message']='Validation unseccessful';
return $result;
}
$remember=$request->has('remember')?true:false;
$user=User::where('email',$request->get('email'))->first();
if (Auth::attempt(array('phone' => $request->input('email'), 'password' => $request->input('password')), $remember)){
$usertoken=new UserToken;
$usertoken->user_id=$user->id;
$usertoken->usertoken=$user->remember_token;
$save=$usertoken->save();
if ($save){
$usertoken=UserToken::where('user_id', $user->id)->first();
$token=$usertoken->usertoken;
if (!$token) {
$token=str_random(60);
$usertoken->usertoken=$token;
$update=$usertoken->update();
}
$result['status']='success';
$result['message']='Login successful';
$result['data']=$token;
return $result;
}
}
$result['status']='fail';
$result['message']='Invalid credentials';
return $result;
}
希望这有帮助。