Не удается получить доступ к полю авторизации запроса при использовании промежуточного программного обеспечения - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь создать страницу входа в систему, но я не совсем понимаю, как я могу использовать jwt.Я следовал учебнику на Youtube, но застрял, когда создал промежуточное программное обеспечение, и мне пришлось обратиться к полю авторизации запроса.Почему "req.get ('Authorization')" возвращает неопределенное значение?

------------------ Промежуточное ПО ----------------------


module.exports = (req,res,next) => {
  const authHeader = req.get('Authorization');
  console.log(req.headers)
  if (!authHeader) {
    req.isAuth = false;
    return next();
  }
  const token = authHeader.split(' ')[1];
  if (!token || token === '') {
    req.isAuth = false;
    return next();
  }
  let decodedToken;
  try {
    decodedToken = jwt.verify(token, 'somesupersecretkey');
  } catch (err) {
    req.isAuth = false;
    return next();
  }
  if (!decodedToken) {
    req.isAuth = false;
    return next();
  }
  req.isAuth = true;
  req.userId = decodedToken.userId;
  next();
  }

------------- Часть GraphQL SChema ------------------

  Login : {
      type: AuthType,
      args : {
        email: {type:GraphQLString},
        password: {type:GraphQLString}
      },
     async resolve(parent,args,req){
        await console.log(args.email)
        const user = await UserModel.findOne({ email: args.email });
        if (!user) {
        throw new Error('User does not exist on login!');
        }
        const isEqual = await bcrypt.compare(args.password, user.password);
        if (!isEqual) {
        throw new Error('Password is incorrect!');
        }
        const token = jwt.sign(
        { userId: user.id, email: user.email },
        'somesupersecretkey',
        {
        expiresIn: '1h'
        }
        );


        return {tokenExpiration: 1, userId: user.id, token:token}
    }
 }

------------- React Component --------------

static contextType = AuthContext;

   render(){
        return (
          <ApolloConsumer>
           {client => {
                   return ( <form>
                     <label>Email</label><br/>
                     <input type="text" onChange={(e) => this.setState({email:e.target.value})}/><br/>
                     <label>Password</label> <br/>
                     <input type="text" onChange={(e) => this.setState({password:e.target.value})}/><br/>
                     <input typr="submit" value="Login" onClick={async ()=>{
                      try {
                        const data = await client.query({query:Login,variables:{email:this.state.email,password:this.state.password}})
                        this.context.login(data.data.Login.userId,data.data.Login.token)
                      } catch(err) {
                        throw err
                      }
                     }}/>
                     </form>)
                     }}
           </ApolloConsumer>
    )
  }

--- Запрос ---

const Login = gql`
query ($email:String!,$password:String!){
   Login(email:$email,password:$password){
     token
     userId
   }
}
`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...